如何使返回类型具有与打印功能相同的输出?

时间:2018-08-27 09:45:23

标签: java eclipse assert

说我有一段代码:

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语句上的错误表明,当ii++处递增时,它是“ 无效代码

我如何拥有它,以便返回类型与print语句所执行的操作相同?

4 个答案:

答案 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();
}