仅尝试捕获一次循环

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

我有一个 try-catch ,旨在捕获任何非整数的内容。当我输入非整数(例如 5.6)时,它告诉我只允许输入整数,并让我重试(应该如此)。但是,如果我再次输入非整数,它不会说什么,并且会继续接受输入,使输出留空。

if (choicesObjects == b) {
    System.out.println("TEST 2");            
    System.out.println("Object: Right triangle");
    System.out.println("\nEnter length of Right triangle: ");

    int lengthOfTriangle = 0;  
    try {                 
        lengthOfTriangle = input.nextInt();         
    } catch(InputMismatchException e) {        
        System.out.println("\nError: user input must be an integer greater than 0.\n");
        System.out.println("Object: Right triangle");
        System.out.println("\nEnter length of Right triangle: ");
        input.next();                
    }
    //method stuff
}
java try-catch
4个回答
4
投票

try/catch
语句不是循环。它总是会被执行一次。

当然,如果

try
块内有循环,则该块将继续执行直到终止。但这样的循环需要使用像
while
for
这样的显式命令。

显然,当输入非整数值(例如 5.6)时,

nextInt()
语句会抛出异常并转到
catch
块。如果提供该方法的完整代码可以给出更好的解释。


3
投票

为此,您可以定义一个函数,类似这样的函数应该可以工作

private int getNextInt(Scanner input) {
    boolean isInt = false;
    int userInput;
    while(!isInt) {
        try {
            userInput = Integer.valueOf(input.next());
            isInt = true;
        } catch(NumberFormatException e) {
            // Do nothing with the exception
        }
    }
    return userInput;
}

这应该运行,直到给定的输入是 int,然后返回所述 int


2
投票

类似这样的事情

Boolean check = true;
      
while (check) {
  if choicesObjects == b {
    System.out.println("TEST 2");
    System.out.println("Object: Right triangle");
    System.out.println("\nEnter length of Right triangle: ");

    int lengthOfTriangle = 0;

    try {
      lengthOfTriangle = input.nextInt();
    } catch(InputMismatchException e) {
      System.out.println("\nError: user input must be an integer greater than 0.\n");
      check = false;
                    
      System.out.println("Object: Right triangle");System.out.println("\nEnter length of Right triangle:");
      input.next();
    }

    //method stuff
  }
} 

1
投票

您可以将代码更新为这样的 -

    Scanner in = new Scanner(System.in);
    int num = 0;
    while(true) {
        try{
            num = in.nextInt();
            break;
        }catch(Exception e){
            //print statements
            System.out.println("Try again");
        }
    }
    System.out.println("Done");
© www.soinside.com 2019 - 2024. All rights reserved.