【问题标题】:Java loop run only for the max triesJava 循环仅针对最大尝试运行
【发布时间】:2015-10-30 01:07:16
【问题描述】:

我已经创建了一个 if 语句,而在你做对之前不断提出问题是正确的。但是,就我而言,这不是一个选择。我已经实现了一个具有最大尝试次数的计数器,如果循环运行 3 次并且您仍然出错,则打印“您弄错了”并转到下一个问题。如果他们在 3 次尝试内答对了,“转到下一个问题”,分数 ++ 就在那里记录分数。 score++ 必须只为正确答案保留分数,这就是为什么它在 while (true) 之下。如果有人可以帮助我,那就太棒了。我对改进循环的不同方法持开放态度。 谢谢!

这是循环:

int count = 0;
int maxTries = 3;

do {
    println(q1.PrintQuestion());
    yourAnswer = readLine("Your answer: ");
    if ((q1.IsAnswerCorrect(yourAnswer)) && (count < maxTries))
        break;
    else
        println("You got it wrong! \n");
        count++;
} while (true);

score++; 
println("You got it right! \n");

编辑: 感谢这里的答案,这是我的工作循环。现在我遇到的问题是,如果答案是正确的,它不会进入下一个问题,直到我正确回答了两次,如果我将 maxTries 设置为 3,它会进行 4 次,这就是我减少到 2 次的原因。如果我输入正确,最后一次最大尝试,我必须回答两次。

    int count = 0;
    int maxTries = 2;

    do {
        println(q1.PrintQuestion());
        yourAnswer = readLine("Your answer: ");
        if ((q1.IsAnswerCorrect(yourAnswer)) || (count >= maxTries))
        break;
        else
            println("You got it wrong! \n");
            count++;

    } while (true);

    score++; 
    println("You got it right! \n");

【问题讨论】:

  • 在这种情况下do { ... } while(true);while(true) { ... } 是相同的。后者的使用对可能需要阅读您的代码的其他人更有益。在相关主题上,使用boolean 变量而不是while(true) { if(...) { break; } } 将使您在将来需要更新此代码时受益。

标签: java if-statement while-loop do-loops


【解决方案1】:

计数需要在循环内部而不是外部递增。此外,您检查是否达到 maxtries 或提供正确答案的条件也不正确:

if ((q1.IsAnswerCorrect(yourAnswer)) || (count >= maxTries))
    break;
else
    println("You got it wrong! \n");
    count++;

在提供正确答案或到达maxTries 时停止。

【讨论】:

  • 谢谢,这有效,但无论出于何种原因,它在 5 次尝试后仍然有效,甚至认为 int 用于 maxTries 设置为 3。想知道问题可能出在哪里。
  • @Dmirtriy 将count++ 移动到循环的开头。正如我在上面写的那样,只有在您检查它们是否达到最大尝试次数后,计数才会增加。
【解决方案2】:

您的 count++ 需要在循环内。否则,您的条件 (count

int count = 0;
int maxTries = 3;

do {
    println(q1.PrintQuestion());
    yourAnswer = readLine("Your answer: ");
    if ((q1.IsAnswerCorrect(yourAnswer)) && (count < maxTries)) {
        break;
    }
    else {
        println("You got it wrong! \n");
    }
    //count++ inside the loop
    count++;
} while (true);
score++; 
println("You got it right! \n");

【讨论】:

    【解决方案3】:

    尝试在循环中插入 score++ 和 count++ 行。

    【讨论】:

    • 我在循环之外使用 score++ 来跟踪答案是否正确的原因。我在循环中修复了 count++。
    【解决方案4】:

    您应该在while 循环内增加count。然后您的代码可以检测是否已达到最大尝试次数。

    一旦达到最大尝试次数,您还(可能)需要退出循环。否则,您将得到一个无法摆脱的循环。即一旦达到最大尝试次数,即使答案正确,也不会退出循环。

    如果您将增量分数留在 while 循环之外,它将在两种情况下都添加到分数中,即。答案是正确的或尝试次数已用完。它也应该进入循环内部。

    int count = 0;
    int maxTries = 3;
    
    do {
        println(q1.PrintQuestion());
        yourAnswer = readLine("Your answer: ");
        if (q1.IsAnswerCorrect(yourAnswer)) {
            println("You got it right!\n");
            score++;
            break;
        } 
        println("You got it wrong!\n");
        count++;
        if (count > maxtries) {
            println("You ran out of tries.\n");
            break;
        }
    } while (true);
    

    【讨论】:

    • 很抱歉,我没有真正理解您的说法。之后是真的,我把它移到了 else "count++;" 下。结果相同
    • 此语句有效,但在我将 && (count = 最大尝试次数)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多