说我循环时有以下内容:
int var1 = 3, var2 = 1;
while (var1 != 0 && var2 != var1) {
var1--;
}
知道导致循环结束的最佳方法是什么?
答案 0 :(得分:3)
您的选择基本上是:
之后再次检查,或
将信息保存到变量。
这里#2:
int var1 = 3;
int var2 = 1;
boolean result1;
boolean result2 = false;
while ((result1 = var1 != 0) && (result2 = var2 != var1)) {
var1--;
}
注意您需要result2
上的默认值(如果您愿意,可以使用true
,代码中有任何意义)因为&&
短-circuits,这意味着如果第一个操作数不为真,则第二个操作数永远不会被评估,并且编译器会抱怨result2
可能尚未初始化。
实际上,您只需要result1
(因为如果result2
为result1
,false
将无法更新,所以它并没有真正告诉您任何内容;如果result1
为false
,则result2
的值将来自之前的循环[或默认值])。你这样做可能会更好:
int var1 = 3;
int var2 = 1;
boolean result1;
while ((result1 = var1 != 0) && var2 != var1) {
var1--;
}
if (result1) {
// It was the "var2 != var1" condition that ended the loop
} else {
// It was the "va1 != 0" condition that ended the loop
}
如果您希望始终因某些原因评估这两个选项,Bubletan points out,您可以使用&
,其中(与布尔值)就像&&
一样,除非它不是int var1 = 3;
int var2 = 1;
boolean result1;
boolean result2;
while ((result1 = var1 != 0) & (result2 = var2 != var1)) {
var1--;
}
。 t短路:
=SUBTOTAL(3, B$2:B2)