如何使 return 类型与打印函数具有相同的输出?

How do I make a return type have the same output as a print function?

假设我有这段代码:

public String toString() {
    for(int i = 0; i<states.length; i++) {
        System.out.println(states[i]+ " "); 
    }
    return " ";     
}

这会获取数组的值并将其输出到控制台:

AL (Alabama) - Population: 4860545 
AK (Alaska) - Population: 741522 
AZ (Arizona) - Population: 6908642 

目的实际上是 return 而不是打印这些值,以便可以使用 assertEquals 检查函数但是当我更改代码以便打印时被 return 替换为:

public String toString() {
    for(int i = 0; i<states.length; i++) {
        return states[i]+ " "; 
    }
    return " ";
}

这仍然无法通过 assertEquals 检查并且错误出现在 for 语句上,该语句表示当 ii++ 递增时它是“ 死代码

如何让 return 类型与 print 语句的作用相同?

您可以将 return 类型更改为 String[] 和 return 数组。

public String[] toString() {
                return states;

}

否则你可以有一个字符串生成器

public String toString() {
    StringBuilder strArrBuil= new StringBuilder ();
    for(int a = 0; a<states.length; a++) {
        strArrBuil.append(states[a]+"");

    }
    return strArrBuil.toString();
}

你的循环体中有一个 return 语句,所以你的循环在第一次迭代后 returns,这是没有意义的。

您应该将所有 String 和 return 连接成一个 String:

public String toString() {
    StringBuilder sb = new StringBuilder ();
    for(int i = 0; i<states.length; i++) {
        sb.append(states[i]);
        sb.append(' ');
    }
    return sb.toString();
}

您可能想要连接这些字符串而不是 return 第一个?

public String toString() {
    StringBuilder result = new StringBuilder();
    for(int i = 0; i<states.length; i++) {
        result.append(states[i]);
        result.append("\n");
        }
    return result.toString();
}

您需要使用 states 到 return 中的值创建一个 String

老实说,不需要循环和StringBuilder。只需使用 String.join 方法。

Returns a new String composed of copies of the CharSequence elements joined together with a copy of the specified delimiter.
For example,

String message = String.join("-", "Java", "is", "cool");
// message returned is: "Java-is-cool"

您需要用新行分隔每个值,因为您的输出使用 println.

public String toString(){
     return String.join("\n", states);
}

优势:

  • 有效,
  • String末尾没有分隔符。