Как сделать так, чтобы возвращаемый тип имел тот же вывод, что и функция печати? - PullRequest
0 голосов
/ 27 августа 2018

Скажем, у меня есть этот фрагмент кода:

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 , но когда я изменяю код, чтобы печать заменялась на возвращаемое значение следующим образом:

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

Это все равно завершается ошибкой assertEqualsпроверка и ошибка в операторе for, который говорит, что когда i увеличивается на i++, это " мертвый код "

Как это сделать, чтобы тип возвращаемого значения делалтак же, как то, что делает оператор print?

Ответы [ 4 ]

0 голосов
/ 27 августа 2018

Вам нужно создать String со значениями в states, чтобы вернуть его.

Давайте будем честными, циклы и StringBuilder не нужны.Просто используя метод String.join.

Возвращает новую строку, состоящую из копий элементов CharSequence, объединенных вместе с копией указанного разделителя.
Например,

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

Вы должны разделять каждое значение новой строкой, поскольку ваш вывод использует println.

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

Преимущество:

  • Работает,
  • Нет разделителя в конце String.
0 голосов
/ 27 августа 2018

У вас есть оператор return в теле вашего цикла, поэтому ваш цикл возвращается после первой итерации, что не имеет смысла.

Вы должны объединить все String s и вернуть один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();
}
0 голосов
/ 27 августа 2018

Возможно, вы хотите объединить эти строки и не вернуть первую?

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();
}
0 голосов
/ 27 августа 2018

Вы можете изменить тип возвращаемого значения на 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();
}
...