我有一个Ball类和一个BallContainer类。 BallContainer类包含一个Ball对象的LinkedHashSet,名为contents
。我正在编写的方法之一叫做differentColors()
,顾名思义,它返回集合中不同颜色的球数的整数值。
以下是该方法代码的片段:
int count = 0;
for(Iterator<Ball> b = contents.iterator(); b.hasNext();) {
if(b.getColor().equals(b.next().getColor())){
count++;
}
}
我试图通过Ball迭代器遍历列表,Eclipse IDE给出了一个错误getColor() method is undefined for type Iterator<Ball>
。对我来说,这没有任何意义。 b是Ball类类型的迭代器,因此它能够访问Ball对象方法。我查看了使用Java迭代器的文档,我看到当尝试在列表或集合中打印'current'元素时,会使用.next()方法,因为迭代器在当前元素后面,所以说话。
所以我尝试将代码修改为b.next().getColor().equals(b.next().next().getColor())
为了访问'current'元素的颜色并将其与NEXT元素的颜色进行比较。 Eclipse因为the next() method is undefined for type Ball
而对我大吼大叫。有人可以向我解释发生了什么以及如何纠正这个问题?感谢
答案 0 :(得分:0)
使用&#34;最后一种颜色&#34;你会好得多。变量并一次看一种颜色。此外,如果您真的想要检测颜色变化,那么您的平等测试需要被否定。如果集合按颜色排序,您可以使用以下内容:
int count = 0;
Color lastColor = null;
for (Ball ball : contents) {
Color nextColor = ball.getColor();
if (!nextColor.equals(lastColor)) {
count++;
lastColor = nextColor;
}
}
如果以其他方式排序,您需要一些其他逻辑。我建议您保留Set<Color>
:
int count = 0;
Set<Color> seenColors = new HashSet<>();
for (Ball ball : contents) {
if (seenColors.add(ball.getColor())) {
count++;
}
}