0

toString()-Method を使用して、ArrayList から適切な出力を取得しています。

しかし、オブジェクトごとに数が増える出力をまだ取得できません。

私が書いた現在のコードは次のとおりです。

public class Book {  

    @Override
         public String toString() {

              StringBuilder result = new StringBuilder();

              int i = 1;

              result.append("\n\n-Book "+ i++ +": ");
              result.append("\nTitel: " + this.Titel + "§ ");
              result.append("\nAuthor: " + this.Autor + "§ ");

              return result.toString();
         }

' ' を挿入i++して、出力を取得しようとしています。

ここで、オブジェクトごとに数値が増加します。public class Book();

現在の出力:

-Buch **1**:  
Titel: Hunger Games§ 
Author: Suzanne Collins§ ,

-Buch **1**:   
Titel: Twilight§ 
Author: Stephanie Meyer§ ,

-Buch **1**: 
Titel: Pride and Prejudice§ 
Author: Jane Austen§ ,

私が取得しようとしている出力:

-Buch **1**:  
Titel: Hunger Games§ 
Author: Suzanne Collins§ ,

-Buch **2**:   
Titel: Twilight§ 
Author: Stephanie Meyer§ ,

-Buch **3**: 
Titel: Pride and Prejudice§ 
Author: Jane Austen§ ,
4

3 に答える 3

0

カプセル化された Book オブジェクトで toString() メソッドを呼び出しています。ArrayList 内の他の Book の情報はありません。

これらの行を toString() メソッドから削除してみてください。

int i = 1;
result.append("\n\n-Book "+ i++ +": ");

そして、次のようにコレクションを反復処理します。

List<Book> books = ...
for(int i = 0; i < books.size(); i++){
    System.out.println("\n\n-Book "+ (i + 1) +": ");
    System.out.println(books.get(i));
}

toString() と StringBuilder の使い方は知っているのに、コレクションの反復処理で問題が発生するのは奇妙です。基本的なプログラミング手法に戻ってみてください。

また、多くの回答で静的フィールドの使用が推奨されています。そのアプローチに行かないでください。静的フィールドはこれには適していません。本のコレクションを 2 回反復する必要がある場合は機能しません。

于 2013-10-23T08:54:42.507 に答える