我需要用户的输入不要跳过值

时间:2017-10-10 19:34:44

标签: java

我目前正在为一个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;
        }
    }
}

非常感谢帮助,并提前感谢你:) 抱歉,如果我的英语不是很好。

3 个答案:

答案 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;
    }