我目前正在为一个O Level项目开发一个程序,我已选择建立一个班级管理系统。在我的方法课中,我有各种方法来控制我的程序的不同功能,例如收集学生姓名的方法或显示学生成绩直方图的方法。但是,我发现了我的一种方法存在缺陷。这是一个逐个列出学生姓名的方法(从这个方法之前执行的方法中保存在数组中)并询问学生标记。这里,考虑到数字等级通常在0-100之间,用户能够输入任何不方便的数字。我尝试过以下代码但是我遇到了困境。事实上,代码确实阻止用户输入超过100的标记,但不是允许用户重新输入正确的标记,而是跳过下一个学生,让前一个学生没有标记。以下是代码:
//mark input
public void markin() {
System.out.println("=====================================");
System.out.println("Please enter the mark of the students");
System.out.println("=====================================");
for (int g = 0; g != marks.length; g++) {
System.out.println(names[g]);
marks[g] = Keyboard.readInt();
while(marks[g]<0||marks[g]>100){
System.out.println("Kindly enter a number that is less than 100");
break;
}
}
}
非常感谢帮助,并提前感谢你:) 抱歉,如果我的英语不是很好。
答案 0 :(得分:0)
将标记[g]设置为循环前不允许的数字,如 - 1然后检查while循环内部的键盘输入, (只要while循环没有停止,每次都设置它, marks [g] = Keyboard.readInt();
并且不要打破循环,因为当输入有效时循环将会结束
答案 1 :(得分:0)
你几乎得到了它 - 你需要在你的while循环中读取而不是在没有阅读的情况下破解。另外,do-loop更适合于不必设置初始无效值。
//mark input
public void markin() {
System.out.println("=====================================");
System.out.println("Please enter the mark of the students");
System.out.println("=====================================");
for (int g = 0; g != marks.length; g++) {
System.out.println(names[g]);
do {
System.out.println("Kindly enter a number that is less than 100");
marks[g] = Keyboard.readInt();
} while(marks[g]<0||marks[g]>100);
}
}
答案 2 :(得分:0)
有效答案必须按顺序进入数组。 使用这个简单的技巧将index [g]重置为之前的值 那么你将覆盖标记[g]值,直到你得到一个有效的值:
while(marks[g]<0||marks[g]>100){
System.out.println("Kindly enter a number that is less than 100");
g--; // Resetting index to previous value
break;
}