【发布时间】:2017-06-30 06:33:45
【问题描述】:
我有一种情况,理论上,嵌套在两个 for 循环中的 return 语句总是会到达。
编译器不同意并要求在for 循环之外使用return 语句。我想知道一种优化此方法的优雅方法,这超出了我目前的理解范围,而且我尝试的 break 实现似乎都不起作用。
Attached 是一种来自赋值的方法,它生成随机整数并返回循环的迭代,直到找到第二个随机整数,在作为 int 参数传递给方法的范围内生成。
private static int oneRun(int range) {
int[] rInt = new int[range+1]; // Stores the past sequence of ints.
rInt[0] = generator.nextInt(range); // Inital random number.
for (int count = 1; count <= range; count++) { // Run until return.
rInt[count] = generator.nextInt(range); // Add randint to current iteration.
for (int i = 0; i < count; i++) { // Check for past occurence and return if found.
if (rInt[i] == rInt[count]) {
return count;
}
}
}
return 0; // Never reached
}
【问题讨论】:
-
如果最后一项没有到达,那么您可以使用
while(true)而不是索引循环。这告诉编译器循环永远不会返回。 -
调用范围为 0(或任何其他小于 1 的数字)的函数 (
oneRun(0)),您会看到您很快就到达了无法访问的return -
当提供的范围为负数时达到返回值。您还对输入范围进行了 0 验证,因此您目前没有以任何其他方式捕获它。
-
@HopefullyHelpful 当然,这才是真正的答案。根本不是无用的回报!
-
@HopefullyHelpful 不,因为
nextInt会为range < 0抛出异常。唯一达到返回的情况是range == 0
标签: java