问题描述
我不明白为什么以下方法会在java eclipse中向我发出警告,我同意它看起来很愚蠢,但无法找到一种巧妙地处理它的方法。
特别是,我得到以下建议:
“删除始终为true的表达式”
引用flag
变量,在else
块中,我得到了
“删除对局部变量
flag
的无用分配”
boolean flag = true;
int counter = 1;
while(flag){
// do something
if(condition){
counter ++;
}else{
flag = false;
break;
}
}
解决方法
像这样重写循环:
// some code that sets condition initially goes here.
while(condition)
{
counter++;
// some code that updates condition goes here.
}
这应该满足Java的要求,并且具有简化代码的良好副作用。这是Java while
循环的规范形式,因此,除非您有充分的理由,否则不应该编写它。
问题是flag
很有用,如果它更改并变成false
,如果它从未更改或从未使用过,它将变得无用。由于您还使用了break
指令,因此在错误之后循环将不使用flag
而停止,因此您可以选择flag
或break
int counter = 1;
while(true){
// do something
if(condition){
counter ++;
}else{
break;
}
}
或
boolean flag = true;
int counter = 1;
while(flag){
// do something
if(condition){
counter ++;
}else{
flag = false;
}
}
改进
我也建议您设置一个上限,以避免无限循环即使,如果您100%确信您的condition
马上会是假的,那么这是安全的没有。另外,从您提供的信息来看,您可以使用condition
变体直接将do/while
用作while循环条件
int counter = 1,limit = 1000000;
do{
// do something
counter ++;
}while(condition && counter < limit);
,
虽然您还没有说明condition
是什么,但在我看来,您的while循环可以简单地重写为while (condition)
,而无需使用任何标志。
出现该警告是因为,正如它指出的那样,flag
并未以任何有意义的方式被使用。正如其他人指出的那样,这通常表明您根本不需要它。如果您出于其他原因而没有给出,则需要重新考虑如何构造此代码。 / p>