高效实现:Java 中的“Python For Else Loop”
Posted
技术标签:
【中文标题】高效实现:Java 中的“Python For Else Loop”【英文标题】:Efficient implementation for: "Python For Else Loop" in Java 【发布时间】:2012-10-15 16:25:58 【问题描述】:在 Python 中,描述了一个高效的 for else 循环实现 here
示例代码:
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中有没有更好的类似于Python for else循环的实现?
【问题讨论】:
您可以将if (finishedForLoop == true)
替换为if (finishedForLoop)
。无需测试true
,if
语句会隐式执行此操作:)
【参考方案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
【讨论】:
为什么标记为break
?只有一个循环可以打破。
@FredOverflow:它不是跳出循环,而是封闭块。
@FredOverflow 详细说明 Eric 的评论:未标记的中断将在循环之后的语句上继续,并且仍流经 println
语句。【参考方案2】:
当我需要做这样的事情时,如果不需要额外的信息,我通常会尝试将其分解为一个单独的方法 - 然后可以返回 true
/false
或者找到的值,或者如果未找到,则为 null。它并不总是有效 - 它是非常特定于上下文的 - 但它值得一试。
那么你可以写:
for (...)
if (...)
return separateMethod();
return null; // Or false, or whatever
【讨论】:
对于其他方法不理想的情况,您始终可以使用标记的 break 来“跳出”循环......但在实践中很少看到这种情况。【参考方案3】:没有。这是最简单的。 并不复杂,只是语法而已。
【讨论】:
另外,即使你发现一些“更简单”的东西,它也将是“智能”的。而且“聪明”很难读懂 +1,是的,你是对的,我仍然对更多“智能”解决方案感兴趣:-) 我看不出使用最小语法有什么不明智的。直接回答你的问题,没有什么比这更简单,也没有什么比这更聪明了。【参考方案4】:从 java8 开始,有一种方法可以用“几乎没有”的代码来编写:
if(IntStream.range(2, n).noneMatch(x -> n % x == 0))
System.out.println(n + " is a prime number");
但是:这将比经典的循环中断和标志方法效率低。
【讨论】:
【参考方案5】:不,Java中没有这样的机制
【讨论】:
以上是关于高效实现:Java 中的“Python For Else Loop”的主要内容,如果未能解决你的问题,请参考以下文章