2014-11-09 2 views
0

Я выполняю задание, и в своем классе у меня есть Set, чтобы читать несколько авторов для моего класса Book. Я пытаюсь понять, как правильно реализовать toString. Буду ли я сделать ToString, как обычно, а затем реализовать итератор, как эти:Set Iterator toString - JAVA

public String toString(){ 
     Iterator itr = set.iterator(); 
     while(itr.hasNext()){ 
      Object element = itr.next(); 
     } 

     Return "Book, ISBN:" + isbn +", Author:" + element 
} 

ли, что делать какой-либо смысл?

+2

Ну, у вас слишком много '' возврата '' в этом коде, особенно в первой строке. Попробуйте только одну, как самую последнюю строку. – markspace

+0

Итак, возьмите возврат в первой строке и вернитесь в итератор? в то время как (itr.hasNext()) {// код } возвращение "Книга, ISBN =" + + ISBN "автор:" + элемент; Это правильно? – user2649644

+0

* В этом смысл? * Нет. Прежде всего, toString(), как указывает его имя, должен возвращать String, а не Set . И метод начинается с возвращения строки, а затем выполняет другие действия. Поскольку он уже вернулся, все строки после этого никогда не будут выполняться. Вы понимаете, что означает возврат? Наконец, это, очевидно, не компилируется. Итак, почему вы не читаете сообщения об ошибках, которые вы получаете от компилятора? –

ответ

2

Прежде всего, вы должны использовать точно такой же метод подписи ToString, который:

public String toString() 

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

В-третьих, поставив оператор возврата в цикл всегда спорно.

Хотя я не совсем уверен, как вы хотите реализовать свой toString, но сначала вам нужно изменить их.

1

я бы подумал, что-то больше, как это:

@Override 
public String toString() { 
    StringBuilder sb = new StringBuilder(); 
    sb.append("Book, isbn =" + isbn + ", Author: "); 
    for (String s : authorSet) { 
     sb.append(s).append(" "); 
    } 
    return sb.toString(); 
} 
+0

Я спрошу своего профессора, но я не уверен, что он хочет, чтобы мы это использовали. Спасибо за ваш ввод – user2649644

1

Вы должны соответствовать подписи точно. Используйте аннотацию @Override, чтобы убедиться, что вы это сделали. Второй взгляд на StringBuilder, чтобы создать новую строку небольшими шагами. Однако для этой проблемы вы, вероятно, можете обойтись только с +.

@Override 
public String toString(){ 
     String retString = "Book, isbn =" + isbn + ", Author:"; 
     Iterator itr = set.iterator(); 
     while(itr.hasNext()){ 
      Object element = itr.next(); 
      retString = retString + element.toString(); 
     } 
     return retString; 
} 

Есть немного способов улучшить это, я позволю вам работать над ними.

+0

Это имеет смысл, спасибо – user2649644