【问题标题】:Why do I have to break; out of the loop here?为什么我要打破;在这里脱离循环?
【发布时间】:2015-10-19 21:06:45
【问题描述】:

这是一种生成随机数的算法,直到某个数字的每个数字都大于前一个数字。 (例如:1234、1589 或 6789 而不是 1233 或 1334)然后,它将所有生成的数字打印到控制台上。在我添加中断之前,我无法让它显示数字; if() 中的命令,但是为什么呢?

    public static void numeroNeuf() {

    boolean croissant = false;

    do {
        int entierAleatoire = rnd.nextInt(10000)+1;

        System.out.print(entierAleatoire + " ");

        while (entierAleatoire > 0) {
            int chiffre1 = entierAleatoire % 10;
            entierAleatoire /= 10;
            int chiffre2 = entierAleatoire % 10;

            if (chiffre2 > chiffre1 || chiffre2 == chiffre1) {
                croissant = false;
                break;
            } else {
                croissant = true;
            }
        }
    } while (croissant == false);
}

输出:

1742 8912 1104 7216 7473 3276 3267 8780 7583 2143 8285 7555 6812 1893 2188 5351 5427 780 9211 2618 1605 3719 511 7671 5839 735 654 8075 7989 7702 891 4850 2891 3529 1420 642 2723 7217 1629 9742 9408 3910 2301 6936 3865 193 3221 6343 8505 8268 4489 3872 6643 5017 1367 

【问题讨论】:

  • 因为如果你不设置中断条件 entierAleatoire > 0 总是为真,所以你需要一个中断来退出内部的 while,然后去 do while 并打印 System. out.print(entierAleatoire + " ");

标签: java loops break do-while


【解决方案1】:

您正在检查(或设置)croissant 的错误值。

        if (chiffre2 > chiffre1 || chiffre2 == chiffre1) {
            croissant = false;
            break;
        } else {
            croissant = true;
        }
    }
} while (croissant == false);

您将其设置为 false,然后只要值为 false,while 就会继续。

如果您将其设置为 true,那么您将退出(并且根本不需要 else 子句,因为它必须已经为 false)。

这里还有一些其他奇怪的东西,例如你可以只比较>=而不是>==

可能还有其他的东西,这就是我快速浏览时看到的。我建议使用调试器(无论您的 IDE 中内置什么),并在代码一次执行一行时单步执行代码,查看它实际在做什么。

【讨论】:

  • 感谢您的快速回复。我是一名初级 Java 程序员(大学一年级),所以我犯了一些愚蠢的错误 :)
  • 是的,你是对的。正如我所说,我只是快速扫描它:)
猜你喜欢
  • 2020-09-30
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多