如何使 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 语句上,该语句表示当 i
在 i++
递增时它是“ 死代码
如何让 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
末尾没有分隔符。
假设我有这段代码:
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 语句上,该语句表示当 i
在 i++
递增时它是“ 死代码
如何让 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
末尾没有分隔符。