Java:使用nextInt()过滤掉用户输入

时间:2012-12-02 15:07:18

标签: java

我正在创建一个程序,用户输入他们的标记,如果他们输入超过100然后程序停止,但我似乎无法停止超过100的值也被分配给Marks变量......

Scanner scan = new Scanner(System.in);
Int Marks = 0;

while (Marks >= 0 && Marks <= 100) {
        System.out.println("Enter Students Test Marks Here");

        Marks = input.nextInt();
}

// Output Test
System.out.println("The Marks variable value is " +Marks);

3 个答案:

答案 0 :(得分:0)

当您输入的值大于100时,您就在里面:

while (Marks >= 0 && Marks <= 100) {
    System.out.println("Enter Students Test Marks Here");

    Marks = input.nextInt();}

因此,价值已分配给Marks,即while停止,因此会在最后一行打印:

System.out.println("The Marks variable value is " +Marks);

可能的解决方案可能是:

boolean done = true;
int marks;
while(done == true){
    System.out.println("Enter Student Test Marks Here");
    if(input.nextInt() <= 0 || input.nextInt() >= 100){
        done = false;
    }else{
        marks = input.nextInt();
    }
}

System.out.println("The Marks variable value is " + marks);

答案 1 :(得分:0)

这是怎么回事?

         Marks = input.nextInt();
 while (Marks >= 0 && Marks <= 100) {
    System.out.println("Enter Students Test Marks Here");

    Marks = input.nextInt();
}

答案 2 :(得分:0)

你的状况倒退了! while执行条件为真,而非直到条件为真...所以,您需要做的是:

int marks = -1; // Start with an "illegal" marks value

while ((marks<0) || (marks>100)) { // while we have an illegal mark ...
    System.out.println("Enter Students Test Marks Here (0..100)");

    marks = input.nextInt(); // ... ask for a new one
}

此后,您的标记变量包含0到100之间的有效数字。

修改

我刚刚注意到......在他输入正确的值之前你没有询问是否提示用户,而是运行程序直到他输入错误的值并且仅阻止分配给Marks变量。如果确实如此,你可以这样做:

int marks = 0;

while (true) { // Just keep running
    System.out.println("Enter Students Test Marks Here (<0 or >100 to quit)");
    int newMark = input.nextInt();
    if ((newMark<0) || (newMark>100)) break; // Skip out of while loop
    marks = newMark; // Only happens if newMark is between 0 and 100
}

你也可以用break替换return部分,不仅要退出while循环,还要退出调用它的函数,或者甚至System.exit(0),如果你想要立即退出该计划。

但诀窍是在将输入分配给标记之前使用临时变量来检查输入。

(顺便说一句:作为惯例,Java中的变量名通常以小写字母开头......)