java 循环和异常的问题

s71maibg  于 2023-05-05  发布在  Java
关注(0)|答案(3)|浏览(143)

首先,我想说明的是,我是一个初学者与例外,因此我有麻烦。
我正在编写一段代码,它试图使用try catch来检测一个数字是否是整数。因此,如果用户输入的不是整数,比如字母'a',我希望代码会要求输入另一个值。换句话说,对于任何不是整数的东西,我想让用户输入另一个值。
代码1:
我尝试过使用一个检测器来检测用户输入是否为和整型

static Scanner kbd = new Scanner(System.in);
    public static void LecturaValidada(){
        int n;
        int esEntero=-1;
        while(esEntero<=0){
            try{
                System.out.print("Introduce un valor: ");
                n = kbd.nextInt();
                esEntero=1;
            } catch(InputMismatchException e){
                System.out.println("Usted ha introducido un caracter/frase, no un entero.");
                esEntero=-1;
            } catch(NumberFormatException e){
                System.out.println("Usted ha introducido un número que no es un entero.");
                esEntero=-1;
            }
        }
        
        System.out.println("Usted SI ha introducido un entero.");
  }

代码2:与代码1相同,但使用do while

public static void LecturaValidada(){
        int n;
        int esEntero=-1;
        do{
            try{
                System.out.print("Introduce un valor: ");
                n = kbd.nextInt();
                esEntero=1;
            } catch(InputMismatchException e){
                System.out.println("Usted ha introducido un caracter/frase, no un entero.");
                esEntero=-1;
            } catch(NumberFormatException e){
                System.out.println("Usted ha introducido un número que no es un entero.");
                esEntero=-1;
            }
        } while(esEntero == -1);
        
        System.out.println("Usted SI ha introducido un entero.");
}

我也一直在玩布尔值
最后,我得到2个输出中的1个:

  • 输出1:它将检测到用户输入的值不是整数,并且它不会要求另一个值
  • 输出2:它将不断显示此消息:“介绍一种勇气:Usted ha introducido un caracter/frase,no un entero.”
ymdaylpp

ymdaylpp1#

下面是处理此问题简单代码

public static void main(String[] args) {
        Scanner kbd = new Scanner(System.in);

        int inputNum = 0;
        boolean isIntValue = false;

        while (!isIntValue) {
            try {
                System.out.print("Enter an Integer Value: ");
                String input = kbd.nextLine();
                inputNum = Integer.parseInt(input);
                isIntValue = true;
            } catch (NumberFormatException e) {
                System.out.println("Invalid input! Please enter an Ingeger Value.");
            }
        }

        System.out.println("You entered the Value " + inputNum + ".");
    }
daupos2t

daupos2t2#

我同意@Vasim Hayat的回答。还有一个替代的解决方案,不使用while循环,而是使用递归(自己调用同一个方法):

public static void main(String[] args) {
    Scanner scn = new Scanner(System.in);

    int inputNum = getIntValue(scn);
    
    System.out.println("You entered the Value " + inputNum + ".");  
}

private static int getIntValue(Scanner scn) {
    System.out.println("Please enter an Integer Value:");
    
    try {
        return Integer.parseInt(scn.nextLine());
    } catch (NumberFormatException e) {
        System.out.println("Invalid input!");
        return getIntValue(scn);
    }
}
wgeznvg7

wgeznvg73#

您必须使用nextInt()调用留下的nextline字符。

catch(InputMismatchException e)
{
    kbd.nextline()
    System.out.println("Usted ha introducido un caracter/frase, no un entero.");
    esEntero=-1;
}

看到这个How can I clear the Scanner buffer in Java?

相关问题