Java中能否验证输入为整数且处于指定范围?附相关代码
在Java中检查输入是否为整数且在指定范围内的正确实现
当然可以做到!不过你当前的代码存在几个逻辑问题,咱们一步步来梳理和修复:
先说说你代码里的问题
input.hasNextInt()的时机不对:你已经调用了input.nextInt()读取输入,此时输入流里剩下的可能是换行符或者其他内容,这个判断根本起不到检查输入是否为整数的作用。- 非整数输入会直接抛出异常:如果用户输入的不是整数,
input.nextInt()会立刻抛出InputMismatchException,根本进不了后面的while循环。 - 循环内没有重新读取输入:就算进入了循环,也没有获取新的输入,会导致无限循环。
两种正确的实现方式
方式一:使用异常捕获处理
这种方式通过捕获nextInt()抛出的异常来处理非整数输入,逻辑清晰易懂:
import java.util.InputMismatchException; import java.util.Scanner; public class BetHandler { private int potAmount = 100; // 示例筹码量,你可以替换成实际值 private Scanner input = new Scanner(System.in); public void getBetAmountFromUser() { int betAmount = 0; boolean isInputValid = false; System.out.println("Your current pot is: " + potAmount); System.out.println("Enter your bet amount: "); while (!isInputValid) { try { // 尝试读取整数输入 betAmount = input.nextInt(); // 检查是否在合法范围内 if (betAmount >= 0 && betAmount <= potAmount) { isInputValid = true; } else { System.out.println("Error - bet must be between 0 and " + potAmount + ". Please try again:"); } } catch (InputMismatchException e) { // 处理非整数输入的情况 System.out.println("Error - please enter a valid whole number. Try again:"); // 清空输入缓冲区的错误内容,避免死循环 input.nextLine(); } } // 到这里betAmount就是合法的了,你可以接着处理业务逻辑 System.out.println("Success! You've bet: " + betAmount); input.close(); } public static void main(String[] args) { new BetHandler().getBetAmountFromUser(); } }
方式二:使用hasNextInt()预检查
这种方式先判断输入是否为整数,再读取,不需要捕获异常,更符合常规的流程判断:
import java.util.Scanner; public class BetHandler { private int potAmount = 100; private Scanner input = new Scanner(System.in); public void getBetAmountFromUser() { int betAmount = 0; System.out.println("Your current pot is: " + potAmount); System.out.println("Enter your bet amount: "); while (true) { if (input.hasNextInt()) { betAmount = input.nextInt(); // 验证数值范围 if (betAmount >= 0 && betAmount <= potAmount) { break; // 输入合法,跳出循环 } else { System.out.println("Error - bet can't exceed your pot or be negative. Try again (0 to " + potAmount + "):"); } } else { System.out.println("Error - that's not a valid integer. Please try again:"); // 清空错误的输入内容 input.nextLine(); } } System.out.println("Great! Your bet of " + betAmount + " is confirmed."); input.close(); } public static void main(String[] args) { new BetHandler().getBetAmountFromUser(); } }
关键注意点
- 清空输入缓冲区:不管用哪种方式,当输入错误时,一定要调用
input.nextLine()把输入流里的错误内容清空,否则这些内容会一直留在缓冲区里,导致下一次读取依然失败,进入死循环。 - 先验证整数类型,再检查范围:确保只有合法的整数才会进入范围判断,避免非整数输入干扰逻辑。
内容的提问来源于stack exchange,提问作者Harry.Smith
相关产品推荐
相关产品推荐

