目前,我有这个:
do{
if (i < y){ //y is a constant
ObsHandler.obsPartsHandler(); //increment i twice
ObsHandler.search();
}
else {
break;
}
} while (!endline.equals(null)); // endline is changed during each loop cycle
使用此循环和我的输入,endline不能为null;这使得while循环破坏条件变得多余。当我尝试将此循环转换为for循环时,我从Eclipse中得到了错误的构造错误。
即:
for (i < y) {
ObsHandler.obsPartsHandler(); //increment i twice
ObsHandler.search(); }
虽然,我有工作的while循环,但对我来说似乎是不好的做法。 有什么建议?感谢。
答案 0 :(得分:6)
如果您想使用for
循环,则需要使用标准for
的所有三个部分。由于您有两个条件,因此它们都必须包含在条件部分中:
for ( ; i < y && !endline.equals(null); ) {
ObsHandler.obsPartsHandler();
ObsHandler.search();
}
您可能有一些i
的初始化代码,例如i=0
,它们也可以进入for
循环的初始化部分。否则,如果您拥有的是一组要检查的条件而没有某些数组或列表,那么您需要进行迭代,while
或do
确实更合适。
答案 1 :(得分:6)
如果您不需要检查endLine
,您仍然可以使用while循环:
while (i < y) {
ObsHandler.obsPartsHandler(); //increment i twice
ObsHandler.search();
}
如果您还需要查看endLine
:
while (i < y && !endline.equals(null)) {
ObsHandler.obsPartsHandler(); //increment i twice
ObsHandler.search();
}
注意:do / while(您的初始代码)和while {}之间的区别在于,在第一种情况下,循环始终至少运行一次。使用while {},如果条件在开头不为真,则根本不运行。这与for循环的行为相同(如果在循环之前条件为false,则不会运行)。
答案 2 :(得分:2)
while
循环似乎是您代码的自然选择。我只想将其简化为:
do {
ObsHandler.obsPartsHandler(); //increment i twice
ObsHandler.search();
} while (i < y && !endline.equals(null)); // endline is changed during each loop cycle
或者,如果您需要检查之前的条件:
while (i < y && !endline.equals(null)) {
ObsHandler.obsPartsHandler(); //increment i twice
ObsHandler.search();
}
答案 3 :(得分:2)
for (boolean start=true;(start || endline != null) && i < y;){
start=false;
ObsHandler.obsPartsHandler(); //increment i twice
ObsHandler.search();
}
(startendline != null)
仅在第二次测试
i < y
仅在第一时间进行测试。