0

「Computer、Code:21」、「History、Code:31」を格納するコンボボックスがあり、アイテムの数も変更できますが、アイテムを取得するためにこのコードを書くと:

List<String> bIHELessons = new ArrayList<String>();
for (int i=0;i<jComboBox1.getItemCount();i++) {
   String lessons = (String) jComboBox1.getItemAt(i);
   if (lessons != null&& lessons.trim().length()!=0) {
      bIHELessons.add(lessons);
      System.out.println(bIHELessons.toString());
   }
}

コンソールに次の文が表示されます。

[コンピュータ、コード=21]

[コンピュータ,コード=21, 履歴,コード:31]

4

4 に答える 4

3

でリストに追加しているためですbIHELessons.add(..)。後続の各呼び出しは、既に出力された文字列に追加されます。

ArrayList に追加して ArrayList にある現在の項目を出力したい場合は、System.out.println(bIHELessons.get(i));現在のものを使用するのではなく、 を使用してください。toString()また、オブジェクトが既に type にあるため、使用する必要はないと思いますstring

現在繰り返し処理している文字列のみを出力する場合は、に変更System.out.println(bIHELessons.toString());します。System.out.println(lessons);

于 2009-11-25T13:45:58.773 に答える
1

私が見ることができることから、あなたのコードは本来あるべきことを行っています。印刷画面への追加の呼び出しごとにすべての項目が繰り返される理由を知りたいですか?

これは、List の toString() メソッドがリスト内のすべての項目を単一の文字列に入れているために発生しています。

于 2009-11-25T13:50:12.733 に答える
1

問題は JComboBox ではなく、あなたの期待にあると思います。ArrayListSystem.out.println(bIHELessons.toString());の内容全体を出力します。bIHELessons反復ごとに新しい String を ArrayList に追加しているためSystem.out.println(bIHELessons.toString());、コンテンツの漸進的な蓄積を示すことは論理的です。

あなたの質問は明確ではありませんが、 System.out.println をループの外に移動し、それが探しているものかどうかを判断することを検討してください。

于 2009-11-25T14:03:10.987 に答える
0

リスト全体の ToString() 表現を出力しています。オブジェクトを印刷したい場合は、代わりにレッスン変数を印刷するだけです。

于 2009-11-25T14:08:04.347 に答える