Java 使用while循环验证布尔输入

Java 使用while循环验证布尔输入,java,Java,我正在做一些Java作业,但我无法让这个while循环正常工作 我试图编辑代码,但它总是出错 while(true) { System.out.println("Is student a TA? (1: YES 0: NO): "); status = inReader.nextInt(); if (status == 1) { status1 = tr

我正在做一些Java作业,但我无法让这个while循环正常工作

我试图编辑代码,但它总是出错

while(true) {
            System.out.println("Is student a TA? (1: YES 0: NO): ");
                status = inReader.nextInt();
                    if (status == 1) {
                        status1 = true;
                    }
                    else if (status == 0) {
                            status1 = false;
                    }
                    else {
                        System.out.println("Please enter valid entry.");
                    } 
            Graduate grad = new Graduate(studentID, name, major, status1);
            grad.displayStudentData();
                }   
            }
        }
   }
如果用户输入的不是0或1,我希望代码能够返回。
它确实会循环返回,但信息会输出到控制台。这不是我所希望的。解决方案:

boolean run = true;
while(run){

    boolean valid = true;
    System.out.println("Is student a TA? (1: YES 0: NO): ");
    status = inReader.nextInt();
    boolean status;
    if (status == 1) {
        status1 = true;
        run = false;
    }
    else if (status == 0) {
        status1 = false;
        run = false;
    }
    else {
        System.out.println("Please enter valid entry.");
        valid = false;
    } 
    if(valid){ //or if(valid == true)
        Graduate grad = new Graduate(studentID, name, major, status1);
        grad.displayStudentData();
    }
}  

解决方案

boolean run = true;
while(run){

    boolean valid = true;
    System.out.println("Is student a TA? (1: YES 0: NO): ");
    status = inReader.nextInt();
    boolean status;
    if (status == 1) {
        status1 = true;
        run = false;
    }
    else if (status == 0) {
        status1 = false;
        run = false;
    }
    else {
        System.out.println("Please enter valid entry.");
        valid = false;
    } 
    if(valid){ //or if(valid == true)
        Graduate grad = new Graduate(studentID, name, major, status1);
        grad.displayStudentData();
    }
}  

您要做的是,一旦输入了非
1
0
的输入,您将在
else
块中执行代码。然后您的代码将执行

Graduate grad = new Graduate(studentID, name, major, status1);
grad.displayStudentData();

如果不希望执行该操作,请添加
continue
else
块的末尾。

您要做的是,一旦输入了非
1
0
的输入,您将在
else
块中执行代码。然后您的代码将执行

Graduate grad = new Graduate(studentID, name, major, status1);
grad.displayStudentData();

如果不希望执行该操作,请添加
continue
else
块的末尾。

我假设您使用
grad
变量所做的是在得到无效答案时不希望显示的信息。我还假设你最终想要退出循环

boolean doLoop = true;
Graduate grad = null;

while(doLoop) {
        System.out.println("Is student a TA? (1: YES 0: NO): ");
        status = inReader.nextInt();

        if (status == 1) {
            grad = new Graduate(studentID, name, major, true);
            doLoop  = false;
        }
        else if (status == 0) {
            grad = new Graduate(studentID, name, major, false);
            doLoop  = false;
        }
        else {
            System.out.println("Please enter valid entry.");
        } 

        if (grad != null){
            grad.displayStudentData();
        }
    }
}
检查
null
仅允许您在有显示内容时显示内容

摆脱
status1
变量可以减少您需要精神上跟踪的变量数量。无论如何,这个变量是不必要的,因为有更好的方法来处理验证输入

设置
doLoop
变量允许您在需要时退出
while


此外,您发布的代码还有几个右括号。最好确保您发布的代码是可运行的或伪代码。

我假设您使用
grad
变量所做的是在得到无效答案时不希望显示的信息。我还假设你最终想要退出循环

boolean doLoop = true;
Graduate grad = null;

while(doLoop) {
        System.out.println("Is student a TA? (1: YES 0: NO): ");
        status = inReader.nextInt();

        if (status == 1) {
            grad = new Graduate(studentID, name, major, true);
            doLoop  = false;
        }
        else if (status == 0) {
            grad = new Graduate(studentID, name, major, false);
            doLoop  = false;
        }
        else {
            System.out.println("Please enter valid entry.");
        } 

        if (grad != null){
            grad.displayStudentData();
        }
    }
}
检查
null
仅允许您在有显示内容时显示内容

摆脱
status1
变量可以减少您需要精神上跟踪的变量数量。无论如何,这个变量是不必要的,因为有更好的方法来处理验证输入

设置
doLoop
变量允许您在需要时退出
while


此外,您发布的代码还有几个右括号。最好确保您发布的代码是可运行的或伪代码。

我建议您从编写代码开始后退一步,并用英语(或任何其他书面人类语言)描述步骤。例如,您可以编写如下内容:

while input is invalid
    get input
    check if input is valid
create a Graduate object
display data
这称为“伪代码”。请注意,我如何使用缩进,类似于我们如何编写代码来指示while循环中重复的步骤。这还显示了最后两个步骤应该如何而不是在while循环中


如果您希望能够为多个学生执行此操作,则应围绕此循环进行另一个循环。同样,用文字写出步骤,以找出您需要的确切结构。

我建议您从编写代码开始后退一步,用英语(或任何其他书面人类语言)描述步骤。例如,您可以编写如下内容:

while input is invalid
    get input
    check if input is valid
create a Graduate object
display data
这称为“伪代码”。请注意,我如何使用缩进,类似于我们如何编写代码来指示while循环中重复的步骤。这还显示了最后两个步骤应该如何而不是在while循环中

如果您希望能够为多个学生执行此操作,则应围绕此循环进行另一个循环。同样,用文字写出步骤,找出你需要的确切结构。

你自己说

如果用户输入的不是0或1,我希望代码能够返回

那么为什么不把它放在这个条件下呢

// initialize with invalid value so we enter the loop at least once
int input = -1;
while (input != 0 && input != 1) {
    System.out.println("Is student a TA? (1: YES 0: NO): ");
    input = inReader.nextInt();
}
// now you're guaranteed to have a 0 or 1 in the input
boolean status = input == 1; // will the true on 1, false on 0
Graduate grad = new Graduate(studentID, name, major, status);
grad.displayStudentData();
你自己说,

如果用户输入的不是0或1,我希望代码能够返回

那么为什么不把它放在这个条件下呢

// initialize with invalid value so we enter the loop at least once
int input = -1;
while (input != 0 && input != 1) {
    System.out.println("Is student a TA? (1: YES 0: NO): ");
    input = inReader.nextInt();
}
// now you're guaranteed to have a 0 or 1 in the input
boolean status = input == 1; // will the true on 1, false on 0
Graduate grad = new Graduate(studentID, name, major, status);
grad.displayStudentData();

您知道
继续
中断
吗?在代码的正确位置插入其中一个将使代码的行为符合您的要求。为什么不在while循环中仅包装读取内容?创建和输出可以在外部完成。您知道
继续
中断
吗?在代码的正确位置插入其中一个将使代码的行为符合您的要求。为什么不在while循环中仅包装读取内容?创建和输出可以在外部完成。”但您也可以这样编写:
while(run==true)
“不,不要这样做。这会持续设置
有效的
变量以及默认为不真实的状态。如果使用此方法,最好将循环外的
valid
变量设置为
false
,并仅在其实际有效时才将其设置为
true
。”但也可以这样编写:
while(run==true)
“否,不要这样做。这会持续设置
有效的
变量以及默认为不真实的状态。如果使用此方法,则最好将循环外的
valid
变量设置为
false
,并仅在实际有效时将其设置为
true