36

在 Python 中,这里描述了一个有效的 for else 循环实现

示例代码:

for x in range(2, n):
    if n % x == 0:
        print n, 'equals', x, '*', n/x
        break
else:
    # loop fell through without finding a factor
    print n, 'is a prime number'

在 Java 中,我需要编写更多代码来实现相同的行为:

finishedForLoop = true;
for (int x : rangeListOfIntegers){
    if (n % x == 0)
    {
        //syso: Some printing here
        finishedForLoop = false
        break;
    }
}
if (finishedForLoop == true){
    //syso: Some printing here
}

Java中的else循环有没有更好的类似于Python的实现?

4

5 回答 5

74

它是这样完成的:

class A {
    public static void main(String[] args) {
        int n = 13;
        found: {
            for (int x : new int[]{2,3,4,5,6,7,8,9,10,11,12})
                if (n % x == 0) {
                    System.out.println("" + n + " equals " + x + "*" + (n/x));
                    break found;
                }
            System.out.println("" + n + " is a prime number");
        }
    }
}

$ javac A.java && java A
13 is a prime number
于 2013-06-24T17:51:53.990 回答
15

当我需要做这样的事情时,如果不需要额外的信息,我通常会尝试将其分解为一个单独的方法——然后它可以返回true/false或者返回找到的值,或者如果没有找到则返回 null。它并不总是有效 - 它是非常特定于上下文的 - 但它是值得尝试的。

然后你可以写:

for (...) {
    if (...) {
       return separateMethod();
    }
}
return null; // Or false, or whatever
于 2012-10-25T13:15:49.217 回答
3

不,这是最简单的。它并不复杂,它只是语法。

于 2012-10-25T13:14:38.380 回答
1

由于 java8 有一种方法可以用“几乎没有”代码来编写它:

if(IntStream.range(2, n).noneMatch(x -> n % x == 0)) {
   System.out.println(n + " is a prime number");
}

但是:这将比经典的循环中断和标志方法效率低。

于 2016-11-11T13:07:20.143 回答
0

不,Java 中没有这样的机制

于 2012-10-25T13:14:59.163 回答