如何用Scanner验证用户输入是否为整数?含国家代码校验需求
嘿,这两个和Java Scanner相关的问题我门儿清,给你一步步讲明白!
问题解答
1. 如何使用Scanner工具检查用户输入的内容是否为整数?
Scanner自带的hasNextInt()方法就是专门干这个的!它会先判断输入缓冲区里的下一个内容是不是整数:是就返回true,不是就返回false。不过这里有个容易踩的坑:如果用户输入了非整数,这个无效内容会留在缓冲区里,要是不处理,下次调用hasNextInt()会一直返回false,直接导致死循环。所以必须用next()或者nextLine()把无效输入清掉。
基础检查示例
import java.util.Scanner; public class IntegerChecker { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); if (scanner.hasNextInt()) { int inputNum = scanner.nextInt(); System.out.println("你输入的整数是:" + inputNum); } else { System.out.println("输入的不是整数!"); // 清除缓冲区里的无效输入,避免后续操作出问题 scanner.next(); } scanner.close(); } }
循环直到输入正确的示例
如果想让用户一直输入直到给出有效整数,可以用循环实现:
import java.util.Scanner; public class IntegerCheckerLoop { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int validNum = 0; boolean isInputValid = false; while (!isInputValid) { System.out.print("请输入一个整数:"); if (scanner.hasNextInt()) { validNum = scanner.nextInt(); isInputValid = true; System.out.println("终于输入正确啦!整数是:" + validNum); } else { System.out.println("输入无效,请重新尝试!"); scanner.next(); // 必须清掉无效输入,不然循环会卡死 } } scanner.close(); } }
2. 实现引导用户输入国家名称和代码的程序
结合上面的整数检查逻辑,我们可以写出完全符合需求的程序:先获取国家名称(支持带空格的名称),然后循环获取国家代码,只要输入非整数就显示Invalid Input,直到用户输入有效整数为止。
完整代码示例
import java.util.Scanner; public class CountryInputHandler { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 获取国家名称(用nextLine()支持带空格的名称,比如"United States") System.out.print("请输入国家名称:"); String countryName = scanner.nextLine(); // 获取国家代码,确保是整数 int countryCode = 0; boolean isCodeValid = false; while (!isCodeValid) { System.out.print("请输入国家代码(必须为整数):"); if (scanner.hasNextInt()) { countryCode = scanner.nextInt(); isCodeValid = true; // 输出最终结果 System.out.println("\n你输入的信息如下:"); System.out.println("国家名称:" + countryName); System.out.println("国家代码:" + countryCode); } else { System.out.println("Invalid Input"); scanner.next(); // 清除无效输入,防止死循环 } } scanner.close(); } }
如果需要额外限制国家名称不能为空,可以在获取名称后加个判断:比如如果countryName.trim().isEmpty(),就提示用户重新输入名称,这个可以根据需求自行扩展。
内容的提问来源于stack exchange,提问作者Yan
相关产品推荐
相关产品推荐

