使用while循环验证布尔输入

时间:2019-07-24 15:55:41

标签: java

我正在做一些Java作业,而while循环无法正常工作。

我试图编辑代码,但是它一直在提示错误。

   ID   Status      Date    Cost    Duration
0   1   F       2017-06-22  500     nan
1   1   M       2017-07-22  100     30.00
2   1   P       2017-10-22  100     92.00
3   1   F       2018-06-22  600     243.00
4   1   M       2018-08-22  150     61.00
5   1   P       2018-10-22  120     61.00
6   1   F       2019-03-22  750     151.00
7   2   M       2017-06-29  200     nan
8   2   F       2017-09-29  600     92.00
9   2   F       2018-01-29  500     122.00
10  2   M       2018-03-29  100     59.00
11  2   P       2018-08-29  100     153.00
12  2   M       2018-10-29  100     61.00
13  2   F       2018-12-29  500     61.00
14  3   M       2017-03-20  300     nan
15  3   F       2018-06-20  700     457.00
16  3   P       2018-08-20  100     61.00
17  3   M       2018-10-20  250     61.00
18  3   F       2018-11-20  100     31.00
19  3   P       2018-12-20  100     30.00
20  3   F       2019-03-20  600     90.00
22  4   M       2017-08-10  800     nan
23  4   F       2018-06-10  100     304.00
24  4   P       2018-08-10  120     61.00
25  4   F       2018-10-10  500     61.00
26  4   M       2019-01-10  200     92.00
27  4   F       2019-06-10  600     151.00

如果用户输入的不是0或1,我希望代码环回。 它确实会环回,但信息会输出到控制台。这不是我希望的。

5 个答案:

答案 0 :(得分:1)

我将假设您使用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

此外,您发布的代码还有一些额外的括号。确保您发布的代码是可运行的或伪代码是一个好主意。

答案 1 :(得分:1)

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

while input is invalid
    get input
    check if input is valid
create a Graduate object
display data

这称为“伪代码”。注意,我如何使用缩进方式,类似于我们编写代码的方式,以指示在while循环中重复哪些步骤。这也显示了最后两个步骤应如何在while循环内。

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

答案 2 :(得分:0)

解决方案

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();
    }
}  

答案 3 :(得分:0)

您要执行的操作是,一旦输入了非10的输入,您将在else块中执行代码。然后您的代码将执行

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

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

答案 4 :(得分:0)

你自己说,

  

如果用户输入的不是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();