WHILE循环条件不验证输入

时间:2015-03-17 10:23:24

标签: java exception netbeans while-loop conditional-statements

我有一个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,则不再循环。

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

感谢任何帮助!

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

您可以使用marks条件检查while循环中的if,在这里您可以使用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 也会退出循环。

希望它会对你有所帮助。
非常感谢。

答案 2 :(得分:1)

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