Эффективная реализация для: "Python For Else Loop" в Java
В Python существует эффективная реализация цикла else 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
}
Есть ли какая-нибудь лучшая реализация, подобная петле Python for else в Java?
Ответы
Ответ 1
Сделано вот так:
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
Ответ 2
Когда мне нужно сделать что-то вроде этого, если дополнительная информация не требуется, я обычно пытаюсь разбить ее на отдельный метод, который затем может вернуть true
/false
или, альтернативно, либо найденное значение, либо null, если он не найден. Это не всегда работает - это очень контекстно-специфическое, но это что-то стоит попробовать.
Тогда вы можете просто написать:
for (...) {
if (...) {
return separateMethod();
}
}
return null; // Or false, or whatever
Ответ 3
Нет. Это самое простое. Это не так сложно, это просто синтаксис.
Ответ 4
Нет, в Java нет такого механизма, как
Ответ 5
Так как java8 есть способ записать это с кодом "почти нет":
if(IntStream.range(2, n).noneMatch(x -> n % x == 0)) {
System.out.println(n + " is a prime number");
}
НО: это будет менее эффективно, чем классический метод looping-with-break-and-flag.