我有一个组合框,可以存储“计算机,代码:21”,“历史,代码: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]
答案 0 :(得分:3)
因为您要使用bIHELessons.add(..)
附加到列表中。每个后续调用都会添加到已打印的字符串中。
如果您仍想添加到ArrayList并打印ArrayList中的当前项,请使用System.out.println(bIHELessons.get(i));
而不是使用现在的内容。我也认为您不需要使用toString()
,因为您的对象已经在string
类型中。
如果您只想打印当前正在迭代的字符串,请将System.out.println(bIHELessons.toString());
更改为System.out.println(lessons);
。
答案 1 :(得分:1)
从我所看到的,您的代码正在做它应该做的事情。您是否想知道为什么在每次打印屏幕的额外调用时都会看到所有项目重复?
这种情况正在发生,因为List的toString()方法将列表中的所有项目放入一个字符串中。
答案 2 :(得分:1)
我认为问题不在于JComboBox,而在于您的期望。 System.out.println(bIHELessons.toString());
将打印出bIHELessons
ArrayList的全部内容。由于您在每次迭代时都向ArrayList添加了一个新的String,因此System.out.println(bIHELessons.toString());
显示内容的渐进累积是合乎逻辑的。
您的问题不明确,但您可以考虑将System.out.println移到循环之外,并确定这是否是您要查找的内容。
答案 3 :(得分:0)
您正在打印整个列表的ToString()表示。如果你想打印出对象,你可以打印出课程变量。