java - 我听说有些 "break"不是坏习惯。这个如何?

标签 java primes break

我经常听说在 Java 中使用 break 被认为是不好的做法,但在阅读了 Stack Overflow 上的一些帖子后,我发现并非如此。许多人说在某些情况下这是可以接受的。

对于在这种情况下什么是/不是坏做法,我有点困惑。

对于 Project Euler : 问题 7,我已经构建了下面的代码。挑战是找到第 10001 个素数。

int index = 2, count = 1, numPrime = 1;

while (true) {
    index++;

    if (isPrime(index)) {
        count = index;
        numPrime++;
    }

    if (numPrime >= 10001)
        break;
}

System.out.println(count);

这会返回正确答案(在 21 毫秒内),但我是否忽略了一个严重的警告?创建一个不间断的 while 循环是 100% 可能的,但我发现这更容易理解。

我使用 break; 的方式不好吗?我知道总有办法绕过使用一个,但这里真的有那么糟糕吗?

非常感谢

贾斯蒂安

编辑

这是我的 isPrime() 代码。我不妨在我做的时候优化它。

public static boolean isPrime(long num) {  
    if (num == 2)
        return true;

    if (num % 2 == 0 || num <= 0)
        return false;

    for (long i = 3; i * i <= num; i += 2)
        if (num % i == 0)
            return false;

    return true;
}

最佳答案

我不确定一般情况下 break 是不好的做法,但我认为这个是。

这有点傻,因为它没有必要。您的 while (true) ... break 完全等同于:

while (numPrime < 10001) {
   ...
}

但不那么直观。

坚持使用规范的方式来表示事物意味着读者的计算开销更少,使您的代码更易于理解,从而更易于维护并最终更健壮。

编辑(回应评论):你是对的,总有一种方法可以使用,但规则(如果你想要的话)相对简单:写任何最易读的东西。在您发布的情况下,这不是最具可读性的,因为我给出的替代方案是表示这一点的规范方式。在某些情况下,例如循环遍历集合直到找到匹配的特定候选项,使用 break 可能 是表示此模式的最合适方式。

关于何时使用 break 以及何时提取变量并改为使用条件语句,很难(我会争辩说,徒劳无功)尝试提出硬性规定。通常很容易分辨什么是最简单的选择,但并非总是如此。这是经验非常重要的例子之一——你自己阅读和编写的好代码/坏代码越多,你的好例子和坏例子的个人图书馆就越大,你就越容易分辨出什么是“最好的” "* 表示给定概念的方法是。

*当然是主观的!

关于java - 我听说有些 "break"不是坏习惯。这个如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3373305/

相关文章:

java - 来自 RCC(8) 规范或类似规范的维恩图生成软件

java - 为什么这个 break 语句 break 不起作用?

case - Ada Case Statement 在 C 中表现得像什么?

algorithm - 使用一组质数按升序生成整数

javascript - 为什么asm.js比普通js(素数生成)慢?如何加快速度?

scala - 在Scala中,如何在满足条件后立即停止从文件中读取行?

java - 直接访问可迭代对象

Java:Java 中的 UDP 是否可能损坏数据

java - 使用 Tomcat 进行 Spring Boot 部署

java - 在 LeetCode 质数挑战赛中找不到我的程序的修复程序