Efficient implementation for: "Python For Else Loop" in Java

Question:

In Python there is an efficient for .. else loop implementation described
here

Example code:

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'

In Java I need to write more code to achieve the same behavior:

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

Is there any better implementation similar to Python for .. else loop in Java?

Asked By: Michael

||

Answers:

No. That’s the simplest. It’s not that complicated, it’s just syntax.

Answered By: Joe

No, there is no mechanism like this in Java

Answered By: Minion91

When I need to do something like this, if no extra information is needed, I typically try to break it out into a separate method – which can then return true/false or alternatively either the value found, or null if it’s not found. It doesn’t always work – it’s very context-specific – but it’s something worth trying.

Then you can just write:

for (...) {
    if (...) {
       return separateMethod();
    }
}
return null; // Or false, or whatever
Answered By: Jon Skeet

It’s done like this:

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
Answered By: Dog

Since java8 there is a way to write this with “nearly no” code:

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

BUT: this would be less efficient than the classical looping-with-break-and-flag method.

Answered By: Mathias Begert
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.