0

我正在制作一个程序,用户输入他们的标记,如果他们输入超过 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);
4

3 回答 3

0

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

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

    Marks = input.nextInt();}

因此,该值被分配给Markswhile停止的时间,因此它将在最后一行打印:

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);
于 2012-12-02T15:13:24.467 回答
0

这是怎么回事?

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

    Marks = input.nextInt();
}
于 2012-12-02T15:38:18.553 回答
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 中的变量名通常以小写字母开头......)

于 2012-12-02T18:01:43.560 回答