Java,使用扫描仪尝试捕获

问题描述 投票:4回答:5

我正在创建一个小的算法,这是它的一部分。

如果用户输入非整数值,我想输出一条消息,然后让用户再次输入数字:

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”,该怎么办?

java input try-catch java.util.scanner inputmismatchexception
5个回答
3
投票

您不必试一试。这段代码将为您解决问题:

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);
}

5
投票

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

0
投票

[每次获得异常时,wenttocatch都将设置为true,程序将陷入无限循环。只要没有异常,就不会无限循环。


0
投票

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

1)将gotocatch设置为false

2)sc.nextInt()引发错误

3)将gotocatch设置为true

4)重复[因为gotocatch为真]

为了解决catch语句中的这个问题gotocatch = 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
}

-1
投票
....
try {
  ....
} catch (Exception e) {
  sc.next();
  wenttocatch=true;
  System.out.println("xx");
}
© www.soinside.com 2019 - 2024. All rights reserved.