尝试使用Scanner

时间:2015-09-15 18:14:58

标签: java exception try-catch do-while inputmismatchexception

我正在创建一个小算法,这是它的一部分。我想要的是我想如果用户输入一些非整数值我想给用户一个消息并让用户再次输入一个数字

 boolean wenttocatch;

        do{


         try {
             wenttocatch=false;
            number_of_rigons=sc.nextInt(); // sc is an object of scanner class 
        } catch (Exception e) {
           wenttocatch=true;
           System.out.println("xx");
        }

        }while(wenttocatch==true);

并且我得到一个永无止境的循环我无法弄清楚为什么以及如何识别用户是否输入一些非整数,如果用户输入和非整数如何要求用户再次输入

更新 当我打印异常时,我得到的异常是InputMismatchException我应该怎么做

6 个答案:

答案 0 :(得分:4)

Scanner在读取项目之前不会前进。这在Scanner JavaDoc中提到。因此,您可以使用.next()方法查看值,或在阅读hasInt()值之前检查是否int

boolean wenttocatch;
        int number_of_rigons = 0;
        Scanner sc = new Scanner(System.in);
        do {

            try {
                wenttocatch = false;
                number_of_rigons = sc.nextInt(); // sc is an object of scanner class
            } catch (InputMismatchException e) {
                sc.next();
                wenttocatch = true;
                System.out.println("xx");
            }

        } while (wenttocatch == true);

答案 1 :(得分:2)

你不必尝试捕获。这段代码可以帮到你:

public static void main(String[] args) {
    boolean wenttocatch = false;
    Scanner scan = new Scanner(System.in);
    int number_of_rigons = 0;
    do{
        System.out.print("Enter a number : ");
        if(scan.hasNextInt()){
            number_of_rigons = scan.nextInt();
            wenttocatch = true;
        }else{
            scan.nextLine();
            System.out.println("Enter a valid Integer value");
        }
    }while(!wenttocatch);
}

答案 2 :(得分:0)

每当您收到异常时,wenttocatch都会设置为true,程序将陷入无限循环。只要你没有得到异常,你就不会得到无限循环。

答案 3 :(得分:0)

导致错误的sc.nextInt()的逻辑是

1)gotocatch设置为false

2)sc.nextInt()抛出错误

3)gotocatch设置为true

4)重复[因为gotocatch是真的]

要在catch语句中解决此set setocatch = false

catch (Exception e) {
               wenttocatch=false;
               System.out.println("xx");
            }

如果你做的比你在这里显示的更多,请使用计数器[如果你的计数或布尔值,如果你不是],但除非你做的更多,做上面的第一件事

boolean wenttocatch;
int count = 0;

            do{


             try {
                 wenttocatch=false;
                number_of_rigons=sc.nextInt(); // sc is an object of scanner class 
            } catch (Exception e) {
               count++;
               wenttocatch=true;
               System.out.println("xx");

            }

            }while(wenttocatch==true && count < 1);

回答评论:

我想你想要在用户不再输入之前进行整理。根据您的输入,一种方法是这个

int number_of_rigons;
while((number_of_rigons = sc.nextInt()) != null){
    //do something
}

答案 4 :(得分:0)

你可以简单地使用 hasNext(); java中的方法,而不是尝试和捕获。 hasNext() 是 Java Scanner 类的一个方法,如果此扫描器的输入中有另一个标记,则返回 true。

答案 5 :(得分:-1)

....
try {
  ....
} catch (Exception e) {
  sc.next();
  wenttocatch=true;
  System.out.println("xx");
}