2012-12-02 29 views
0

我正在制作一个程序,用户输入他们的标记,如果他们输入超过100,然后程序停止,但是我似乎无法停止超过100的值也被分配该标志变量...Java:使用nextInt()过滤掉用户输入

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); 
+5

没有类型为'Int'在Java中。 –

+1

你必须指定错误:编译或运行时,它的文本等 –

+0

在你的循环条件下,只有当它超过100或低于0时才会打印“标记”,否则你的循环将不会停止。 – Leiaz

回答

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

编辑:

我只注意到...你并没有问,提示用户,直到他进入正确的值,但直到他进入AW运行程序荣价值,而仅仅防止分配到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 
} 

您还可以return代替break部分退出,不仅同时循环,但它的功能,或者甚至可能是System.exit(0),如果你想立即退出程序。

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

(BTW:作为惯例,在Java中的变量名一般用小写字母开头...)

+0

非常感谢,这回答了我的问题,非常感谢所有帮助的人,谢谢! – SludgeWorks

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); 
+0

感谢您的解释,但我不明白为什么代码的while部分不会筛选出超过100个已输入的值? – SludgeWorks

+0

因为您在输入'value'之前输入'while'循环。 while循环将会退出,因为一个大于100的值被赋给了'Marks'。 –

+0

我认为用这段代码会向用户提示THREE TIMES一个新的值(每个input.nextInt()一次),其中两个被丢弃,只用于if检查,另一个实际分配给标记,但没有被检查...这段代码会失败...... –

0

什么回合呢?

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

    Marks = input.nextInt(); 
}