必须避免转到。但有些情况下,如果没有丑陋的代码,你就无法避免它。
考虑这种情况:
当循环中的表达式为true时,循环必须中断。
如果循环内的表达式始终为false,则在循环结束后,必须运行代码。
如果没有goto,有没有一种很好的方法呢?
for (int x = 0; x < input.length; ++x)
if (input[x] == 0) goto go_here; // this is pseudocode. goto is not allowed in java
// execute code
go_here:
我的解决方案是:
both:
do {
for (int x = 0; x < input.length; ++x)
if (input[x] == 0) break both;
// execute code
} while(false);
另一种解决方案是:
boolean a = true;
for (int x = 0; x < input.length; ++x)
if (input[x] == 0) { a = false; break; }
if (a) {
// execute code
}
另一个低效的解决方案(类似于goto)是:
try {
for (int x = 0; x < input.length; ++x)
if (input[x] == 0) throw new Exception();
// execute code
} catch(Exception e) {}
答案 0 :(得分:6)
将您的条件置于方法中:
void yourMethod() {
if (yourCondition(input)) {
// execute code.
}
}
boolean yourCondition(int[] input) {
for (int i : input) {
if (i == 0) return false;
}
return true;
}
或者,如果您想使用IntStream
:
if (IntStream.of(input).noneMatch(i -> i == 0)) {
// execute code.
}
答案 1 :(得分:1)
这是另一种解决方案:
both: {
for (int x = 0; x < input.length; ++x)
if (input[x] == 0) break both;
// execute code
}
块语句是一个语句,因此您可以给它一个标签。