Java数值异常处理:如何实现非数字输入时重新提示用户输入?
解决Java输入整数的验证问题
要实现输入非数字时重新要求用户输入的功能,你可以通过Scanner的hasNextInt()方法判断输入是否为整数,结合循环重复获取有效输入。下面是修改后的完整代码:
import java.util.Scanner; public class SmallestNumber { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 获取三个有效整数 int n1 = getValidIntInput(sc, "Enter first number: "); int n2 = getValidIntInput(sc, "Enter second number: "); int n3 = getValidIntInput(sc, "Enter third number: "); sc.close(); // 计算最小值 int smallest; if(n1 < n2) { smallest = n3 < n1 ? n3 : n1; } else { smallest = n2 < n3 ? n2 : n3; } System.out.println("The smallest number is: " + smallest); } // 封装获取有效整数的方法,复用逻辑 private static int getValidIntInput(Scanner scanner, String prompt) { System.out.print(prompt); while (!scanner.hasNextInt()) { // 吃掉无效的输入内容,避免死循环 scanner.next(); System.out.print("Invalid input! Please enter an integer: "); } // 获取有效整数并清除换行符 int number = scanner.nextInt(); scanner.nextLine(); return number; } }
关键逻辑说明:
hasNextInt()判断:该方法检查输入流的下一个元素是否为整数,返回布尔值,不会抛出异常。- 循环处理无效输入:若输入不是整数,用
scanner.next()读取并丢弃无效内容(否则无效输入会滞留在流中导致死循环),再提示用户重新输入。 - 封装方法复用:把输入验证逻辑封装成独立方法,避免重复编写相同代码,让主逻辑更简洁。
scanner.nextLine()处理换行:nextInt()只会读取整数部分,剩余的换行符需要用nextLine()清除,避免影响后续输入。
替代方案(异常捕获方式):
如果更习惯用异常处理实现,也可以用以下逻辑:
import java.util.InputMismatchException; import java.util.Scanner; // 省略主方法部分,仅替换getValidIntInput方法 private static int getValidIntInput(Scanner scanner, String prompt) { int number = 0; boolean isValid = false; while (!isValid) { System.out.print(prompt); try { number = scanner.nextInt(); isValid = true; } catch (InputMismatchException e) { scanner.next(); // 清除无效输入 System.out.println("Invalid input! Please enter an integer."); } } scanner.nextLine(); return number; }
这种方式通过捕获InputMismatchException处理非整数输入,逻辑和前一种方法一致,按需选择即可。
内容的提问来源于stack exchange,提问作者Aggelos Gk
相关产品推荐
相关产品推荐

