WHILE 循环条件不验证输入

WHILE Loop Condition Does Not Validate Input

我有一个 WHILE 循环来检查特定学生的分数。但是,如果值无效(输入小于0且大于100),则不循环:

int marks= -1;

System.out.print("Student Marks (/100): ");
                while (((marks< 0) || (marks> 100))) {
                    try {
                        marks = Integer.parseInt(sc.nextLine());
                        break;
                    } catch (NumberFormatException nfe) { 
                        System.err.println("Error: Invalid Mark(s)");
                        System.out.print("Student Marks (/100): ");
                    }
                }

如果输入数字以外的字符,它会捕获异常。

但如果值小于 0 或大于 100,则不会再次循环。

我已经尝试对其进行许多更改但没有结果。

感谢您提供的任何帮助!

您应该删除 break 语句,因为无论输入什么 marks 值,它都会使您跳出循环。

您可以使用 if 条件检查 while 循环中的 marks ,在这里您可以使用 break -

import java.util.Scanner;

public class TakeInput{ 

    public static void main(String args[]){

        int marks= -1;
        Scanner sc = new Scanner(System.in);

        System.out.print("Student Marks (/100): ");
        while (sc.hasNext()) {
            try {
                marks = Integer.parseInt(sc.nextLine());
                if(marks<0 || marks>100){
                    break;
                }
                //do something
                // with the marks

                //take new marks
                System.out.print("Student Marks (/100): ");
            } catch (NumberFormatException nfe) { 
                System.err.println("Error: Invalid Mark(s)");
                System.out.print("Student Marks (/100): ");
            }
        }
    }

}  

现在只要在n<0 || n>100时输入除数字n以外的任何内容就会继续循环。任何 NumberFormatExeption 带你到 catch 块。

如果您输入 34,那么它将转到 while 块并提示输入下一个数字。 然后如果你输入 56 那么它会做同样的事情。
当您输入任何 String 而不是数字时,它会进入 block
此过程一直持续到您输入无效数字 (n>100 || n<100)。按 Ctrl+C 也会退出循环。

希望对您有所帮助。
非常感谢。

如果您想保持循环,请始终使用 continue 而不是 break 运行。