Java中如何正确捕获并排序用户输入的5个数字?
Java 整数输入与排序问题解决方案
修正后的完整代码
import java.util.InputMismatchException; import java.util.Scanner; public class App { public static void main(String[] args) { try (Scanner scanner = new Scanner(System.in)) { int[] arr = new int[5]; System.out.println("请输入5个整数(可通过空格或回车分隔):"); // 带验证的输入捕获 int inputCount = 0; while (inputCount < 5) { try { arr[inputCount] = scanner.nextInt(); inputCount++; } catch (InputMismatchException e) { System.out.println("输入无效,请输入整数:"); scanner.next(); // 清除无效输入,避免死循环 } } // 显示未排序数组 System.out.print("排序前数组:"); printArray(arr); // 插入排序(升序) insertionSortAsc(arr); // 显示排序后数组 System.out.print("\n排序后数组:"); printArray(arr); } } // 封装数组打印逻辑,避免重复代码 private static void printArray(int[] arr) { for (int num : arr) { System.out.print(num + " "); } } // 封装插入排序逻辑,代码更清晰 private static void insertionSortAsc(int[] arr) { for (int i = 1; i < arr.length; i++) { int key = arr[i]; int j = i - 1; // 升序排序:将比key大的元素后移 while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } } }
问题逐个解析
1. 输入处理问题
你的原代码中Scanner.nextInt()的逻辑本身正确,但缺少输入验证和异常处理:
- 当用户输入非整数时,会抛出
InputMismatchException导致程序崩溃 - 若输入数量不足,程序会一直阻塞等待输入
修正方案:
- 添加
try-catch捕获输入类型异常 - 用循环计数确保获取到5个有效整数
- 用
scanner.next()清除无效输入,避免死循环
2. 排序逻辑问题
你实现的插入排序代码是正确的升序排序逻辑,如果结果不符合预期:
- 若需要降序排序,只需将
while (j >= 0 && arr[j] > key)改为while (j >= 0 && arr[j] < key) - 检查测试用例:比如输入
5 4 3 2 1,排序后应为1 2 3 4 5,可手动验证逻辑正确性
3. 输出重复问题
从你提供的代码来看,已经正确完成了「输入→打印未排序数组→排序→打印排序后数组」的流程,没有重复输入操作。若之前版本存在重复,只需确保输入捕获仅执行一次,排序操作在输入完成后执行即可。
Scanner 使用技巧与最佳实践
- 强制使用try-with-resources:自动关闭Scanner,避免资源泄漏(你已正确使用)
- 必须处理输入异常:捕获
InputMismatchException并清理无效输入,保证程序健壮性 - 明确输入提示:告知用户输入格式(如空格/回车分隔),减少用户困惑
- 封装重复逻辑:将数组打印、排序等操作封装为独立方法,提升代码可读性
- 避免nextInt()与nextLine()混用:
nextInt()不会读取换行符,后续调用nextLine()会读取空字符串,需先用scanner.nextLine()消耗换行符
内容的提问来源于stack exchange,提问作者pomoworko.com
相关产品推荐
相关产品推荐

