【问题标题】:Do while loop keeps repeating after string input matches condition字符串输入匹配条件后,while循环是否不断重复
【发布时间】:2017-10-08 09:19:27
【问题描述】:

下面的代码是我目前写的,所以什么都没有实现。然而,在程序中,它会询问用户是否降低了最低成绩。如果用户回答说“是”、“是”、“否”或“否”,则 do 循环应该结束并继续执行其余代码。

但是,即使我输入了那些正确的响应,它也会继续循环。我是java新手,如果这真的很愚蠢,请道歉。

代码:

import java.util.Scanner;
public class AvgGrade {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner(System.in);
    int numTest=1;


    //Test Number Checker
    while(numTest<=1) {
        System.out.println("How many tests were given out");
        System.out.println("Must be more than 1");
        numTest=input.nextInt();
    }

    //Lowest Grade Dropped Checker
    boolean droppedLow=false;
    String dropAnswer="default";
    do{
        System.out.println("Is the lowest grade dropped?");
        System.out.println("Answer: Yes, yes, No, no");
        dropAnswer=input.next();
    }
    while(dropAnswer.compareTo("Yes")!=0||dropAnswer.compareTo("yes")!=0||
              dropAnswer.compareTo("No")!=0||dropAnswer.compareTo("no")!=0);

    if(dropAnswer.equals("Yes")||dropAnswer.equals("yes"))
        droppedLow=true;
    else if(dropAnswer.equals("No")||dropAnswer.equals("no"))
        droppedLow=false;




    System.out.println("----------------DEBUG----------------");
    System.out.println(numTest);
    System.out.println(dropAnswer);
    System.out.println(droppedLow);
}

}

控制台/输出:

How many tests were given out
Must be more than 1
5
Is the lowest grade dropped?
Answer: Yes, yes, No, no
Yes
Is the lowest grade dropped?
Answer: Yes, yes, No, no
yes
Is the lowest grade dropped?
Answer: Yes, yes, No, no
no
Is the lowest grade dropped?
Answer: Yes, yes, No, no
No
Is the lowest grade dropped?
Answer: Yes, yes, No, no

【问题讨论】:

  • 已编辑以在示例代码中包含缺少的 import.java.util.Scanner
  • 欢迎来到 Stack Overflow!看来您需要学习使用调试器。请帮助自己一些complementary debugging techniques。如果您之后仍有问题,请随时回来提出更具体的问题。

标签: java loops input do-while


【解决方案1】:

无论您输入什么,这始终是正确的,因此循环将永远继续:

dropAnswer.compareTo("Yes")!=0||dropAnswer.compareTo("yes")!=0||
    dropAnswer.compareTo("No")!=0||dropAnswer.compareTo("no")!=0

基本上,您的条件意味着“如果 dropAnswer 不等于 'Yes' OR 它不等于 'yes' OR 它不等于 'No' OR 它不等于 'no'。” 至少其中三个条件总是为真,因为不存在同时为 'Yes'、'yes'、'No' 和 'no' 的字符串。 p>

我认为您的意思是使用&amp;&amp;(和)而不是||(或):

dropAnswer.compareTo("Yes") != 0 && dropAnswer.compareTo("yes") != 0 &&
    dropAnswer.compareTo("No") != 0 && dropAnswer.compareTo("no") != 0

【讨论】:

    猜你喜欢
    • 2020-05-04
    • 1970-01-01
    • 2011-11-23
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2019-07-18
    相关资源
    最近更新 更多