说我有一段代码:
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
目的实际上是返回而不是打印这些值,以便可以使用 assertEquals 检查该函数,但是当我更改代码时,将print替换为return这样:
public String toString() {
for(int i = 0; i<states.length; i++) {
return states[i]+ " ";
}
return " ";
}
这仍然无法通过assertEquals检查,并且for语句上的错误表明,当i
在i++
处递增时,它是“ 无效代码”
我如何拥有它,以便返回类型与print语句所执行的操作相同?
答案 0 :(得分:3)
循环的主体中有一个return
语句,因此循环在第一次迭代后返回,这没有任何意义。
您应该将所有String
连接起来并返回一个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();
}
答案 1 :(得分:3)
可能是要连接这些字符串而不返回第一个?
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();
}
答案 2 :(得分:1)
您需要使用String
中的值创建一个states
才能返回它。
说实话,不需要循环和StringBuilder
。只需使用String.join
方法。
返回一个新的String,该字符串由CharSequence元素的副本和指定的定界符的副本组成。
例如,String message = String.join("-", "Java", "is", "cool"); // message returned is: "Java-is-cool"
由于您的输出使用的是println
,因此需要用换行分隔每个值。
public String toString(){
return String.join("\n", states);
}
优势:
String
的末尾没有分隔符。答案 3 :(得分:-3)
您可以将返回类型更改为String []并返回数组。
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();
}