【问题标题】:Java, while-loop, counter does not exit loopJava,while循环,计数器不退出循环
【发布时间】:2016-02-27 04:15:18
【问题描述】:

我几乎是 Java 的初学者,但我无法弄清楚以下问题。我希望这段代码生成 0-2 之间的随机数(工作正常)并将其添加到 int A、B、C、D 直到 A+B+C+D 的总和达到 4。我试图解决这个问题带有一个计数器(称为“zaehler”)。当计数器达到 4 时,while 循环不会停止!我真的无法弄清楚 - 也许有人有一些建议?提前致谢!

public void levelUp()
{
    int zaehler = 0; 
    Random randomGenerator = new Random();
    int A = 0;
    int B = 0;
    int C = 0;
    int D = 0;
    while(zaehler <= 4)
    {
        int randomInt1 = randomGenerator.nextInt(3); 
        A += randomInt1;
        zaehler = zaehler + randomInt1;

        System.out.println("randomInt1 = " + randomInt1);
        System.out.println("A = " + A);
        System.out.println("Zaehler = " + zaehler);

        int randomInt2 = randomGenerator.nextInt(3);
        B += randomInt2;
        zaehler = zaehler + randomInt2;

        System.out.println("randomInt2 = " + randomInt2);
        System.out.println("B = " + B);
        System.out.println("Zaehler = " + zaehler);

        int randomInt3 = randomGenerator.nextInt(3);
        C += randomInt3;
        zaehler = zaehler + randomInt3;

        System.out.println("randomInt3 = " + randomInt3);
        System.out.println("C = " + C);
        System.out.println("Zaehler =" + zaehler);

        int randomInt4 = randomGenerator.nextInt(3);
        D += randomInt4;
        zaehler = zaehler + randomInt4;

        System.out.println("randomInt4 = " + randomInt4);
        System.out.println("D = " + D);
        System.out.println("Zaehler = " + zaehler);
    }    
}   

public static void main (String [] args)
{
    TestRandom test = new TestRandom();
    test.levelUp(); 
}   

【问题讨论】:

  • 你有 while(zaehler &lt;= 4) 所以它不会停止直到它达到一个数字 >= 5
  • “不停”是什么意思?
  • 您是否要在达到 4 时立即退出循环?即如果A2B2 你想退出循环而不改变CD?如果是这样,请使用break
  • 你在 3 时会发生什么,然后下一个随机数是 2?结果你会在 5 岁。如何处理这种情况?

标签: java while-loop counter


【解决方案1】:

使用 for 循环。如果您想按自己的意愿停止循环,则可以自行控制,这比 while 更好。

for (int i=0;i<=4;i++){
//Enter your loop here
//To create a random between 0 and 2:
int random= 0+(int)(Math.random()*2));
}

我不知道你是否理解 for 循环,这会创建一个名为 i 的 int(就像你的 zaehler 一样),每次循环结束时都会增加 1。这个循环将一直持续到int i 达到 4。

【讨论】:

  • 他想在A、B、C、D之和>=4时停止循环
  • 那么您的代码必须可以工作,但在 while 循环中使用中断不是一个好习惯。
  • 感谢大家的建议!我尝试了 John Pauls 的解决方案,看起来已经好多了。现在的问题只是有时 A、B、C、D 的总和仍然是 5 而不是 4。这是控制台的示例输出:randomInt1 = 2 A = 2 Zaehler = 2 randomInt2 = 0 B = 0 Zaehler = 2 randomInt3 = 1 C = 1 Zaehler =3 randomInt4 = 2 D = 2 Zaehler = 5 FinalA = 2 FinalB = 0 FinalC = 1 FinalD = 2 5
  • 然后在最后使用 else{} 重复循环或显示另一个答案
  • 不要认为break语句有什么问题。
【解决方案2】:

这将在 4 或 5 处停止。如果您根本不想要 5,那么您需要更新您的问题如何处理这种情况。

public void levelUp()
{
    int zaehler = 0;
    Random randomGenerator = new Random();
    int A = 0;
    int B = 0;
    int C = 0;
    int D = 0;
    while (zaehler <= 4)
    {
        int randomInt1 = randomGenerator.nextInt(3);
        A += randomInt1;
        zaehler = zaehler + randomInt1;

        if (zaehler >= 4)
            break;

        int randomInt2 = randomGenerator.nextInt(3);
        B += randomInt2;
        zaehler = zaehler + randomInt2;

        if (zaehler >= 4)
            break;

        int randomInt3 = randomGenerator.nextInt(3);
        C += randomInt3;
        zaehler = zaehler + randomInt3;

        if (zaehler >= 4)
            break;

        int randomInt4 = randomGenerator.nextInt(3);
        D += randomInt4;
        zaehler = zaehler + randomInt4;

        if (zaehler >= 4)
            break;
    }

    System.out.println("A = " + A);
    System.out.println("B = " + B);
    System.out.println("C = " + C);
    System.out.println("D = " + D);

    System.out.println(zaehler);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 2013-03-01
    相关资源
    最近更新 更多