我有一个对象数组。我想要扫描它,只要我找到的对象不为空,就将计数器增加1.当我找到第一个空对象时,我想要从for循环开始,因为没有理由继续循环。
我写了以下代码:
// counter variable initialized to zero
int counter = 0;
// scan the array
for(int i = 0; i < this.array.length; i++) {
// as long as the object found is not null
while(!this.array[i].equals(null)) {
// increase the value of the counter by 1
counter += 1;
}
// when the first null object found, jump out of the loop
break;
}
for循环中的i ++已标记,警告为Dead Code。但是,我想这是有道理的,因为当我找到第一个空对象时,我停止循环。所以没什么可担心的,或者......?
答案 0 :(得分:5)
在<{1}}循环的第一次迭代结束时,你无条件突破for循环。这与“当找到第一个空对象时”无关 - 它只是在循环体的末尾。
此外,您的for
循环永远不会完成,除非while
确实为空(在这种情况下它会抛出array[i]
)。我想你想要:
NullPointerException
或者更好,使用迭代器:
for (int i = 0; i < this.array.length; i++) {
if (array[i] != null) {
counter++;
} else {
break;
}
}
答案 1 :(得分:0)
将while迭代更改为if
条件为一次,当条件为真时,它将不会中断并进入无限循环。要符合您的要求,请使用以下代码
if(this.array[i] != null) {
// increase the value of the counter by 1
counter += 1;
}
else {
break;
}
答案 2 :(得分:0)
最简单的解决方案是:
int counter = 0;
for (Object item : array) {
if (item == null) {
break;
}
++counter;
}