Java 使用while循环验证布尔输入
我正在做一些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
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
。