Java实现用户输入匹配数组元素、按范围筛选输出元素方法
Java客户数据管理菜单程序Case3/Case4补全实现
现有代码已完成菜单循环、客户新增、全量客户展示基础逻辑,基于ArrayList<CustomerData>存储客户数据、Scanner接收用户输入,以下补全逻辑完全保留原有技术规范,无需修改现有已实现的代码结构。
Case 3 按客户ID查询单条客户完整数据
实现步骤:
- 控制台提示用户输入待查询的客户ID,接收输入时增加非法格式兜底,避免非数字输入导致程序崩溃
- 遍历
ArrayList<CustomerData>集合,逐个匹配客户对象的ID属性与用户输入值 - 匹配到对应客户时,直接复用现有全量展示的打印逻辑输出客户全字段信息;遍历结束未找到匹配项时,输出无匹配记录提示
对应代码片段:
case 3: System.out.println("请输入待查询的客户ID:"); int targetId; // 处理非数字输入 if (!scanner.hasNextInt()) { System.out.println("输入无效,请输入合法数字ID"); scanner.next(); // 清空缓冲区非法内容 break; } targetId = scanner.nextInt(); scanner.nextLine(); // 消费残留换行符,避免后续输入读取异常 CustomerData targetCust = null; for (CustomerData cust : customerList) { if (cust.getId() == targetId) { targetCust = cust; break; } } if (targetCust != null) { System.out.println("查询到客户信息:"); System.out.println(targetCust); } else { System.out.println("未查询到ID为" + targetId + "的客户记录"); } break;
Case 4 按数值范围筛选客户并顺序输出
支持索引区间、销售额区间两类筛选场景,统一接收起始值-结束值格式的输入(例:1-4),实现步骤:
- 控制台提示用户输入筛选范围,明确标注输入格式,接收整行字符串输入
- 校验输入格式:判断是否包含
-分隔符、拆分后的两段内容是否为合法数字、起始值是否小于等于结束值,格式非法时直接输出提示终止当前分支 - 根据当前Case对应的筛选维度遍历集合,按原有存储顺序收集符合区间条件的客户:
- 索引筛选:注意控制台展示的客户序号默认从1开始,需要将输入的起止值减1对齐集合下标(集合下标从0开始)
- 销售额筛选:直接比对客户对象的销售额属性是否落在区间内即可
- 逐行输出符合条件的客户信息,无匹配记录时输出对应提示
对应代码片段(以索引区间筛选为例,销售额筛选只需替换判断条件即可):
case 4: System.out.println("请输入筛选范围,格式为起始值-结束值(例:1-4):"); String rangeStr = scanner.nextLine().trim(); // 基础格式校验 if (!rangeStr.contains("-")) { System.out.println("格式错误,请按「起始值-结束值」格式输入"); break; } String[] rangeParts = rangeStr.split("-"); if (rangeParts.length != 2) { System.out.println("格式错误,请按「起始值-结束值」格式输入"); break; } try { int rangeStart = Integer.parseInt(rangeParts[0].trim()); int rangeEnd = Integer.parseInt(rangeParts[1].trim()); if (rangeStart > rangeEnd) { System.out.println("输入错误,起始值不能大于结束值"); break; } // 索引筛选时做序号对齐,若为销售额筛选可删除这两行,直接用rangeStart、rangeEnd做数值比对 int startIdx = rangeStart - 1; int endIdx = rangeEnd - 1; System.out.println("区间" + rangeStart + "-" + rangeEnd + "内的客户记录:"); int matchCount = 0; for (int i = 0; i < customerList.size(); i++) { // 索引筛选判断条件 if (i >= startIdx && i <= endIdx) { // 销售额筛选替换为下一行判断条件即可 // if (customerList.get(i).getSales() >= rangeStart && customerList.get(i).getSales() <= rangeEnd) System.out.println(customerList.get(i)); matchCount++; } } if (matchCount == 0) { System.out.println("该区间内无匹配客户记录"); } } catch (NumberFormatException e) { System.out.println("输入错误,区间值必须为合法数字"); } break;
注意点:
- 所有输入分支必须加非法值兜底,避免用户输入异常内容时程序直接退出
- 客户信息输出直接复用现有全量列表的打印格式,保持全程序输出风格统一
- 调用
nextInt()、nextDouble()等数值输入方法后,必须调用一次nextLine()消费缓冲区残留的换行符,否则后续字符串输入会读取到空值
内容的提问来源于stack exchange,提问作者Justin Anton Porter
相关产品推荐
相关产品推荐

