我正在做一些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,我希望代码环回。 它确实会环回,但信息会输出到控制台。这不是我希望的。
答案 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)
您要执行的操作是,一旦输入了非1
或0
的输入,您将在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();