如何调整Java循环代码,实现仅输出最终匹配结果?
解决Scanner输入匹配ArrayList时重复输出的问题
原代码的问题出在把输出逻辑写在了遍历客户的循环内部,每遍历一个Customer对象就会打印一次结果,所以才会出现重复输出的情况。另外你代码里那个嵌套的for循环完全没用,只是调用了getCustomerName()却没做任何处理,可以直接删掉。
要实现找到匹配只打印一次“Customer found.”,未找到只打印一次提示的需求,你可以用一个布尔变量标记是否找到匹配项,等遍历完所有客户后再统一输出结果:
private static void checkCustomer() { String k = userOpt.nextLine(); boolean isCustomerFound = false; // 遍历所有客户,查找匹配项 for (Customer c : customers) { if (c.getCustomerName().contains(k)) { isCustomerFound = true; break; // 找到匹配后直接跳出循环,不用继续遍历剩余客户 } } // 遍历结束后,根据标记输出一次结果 if (isCustomerFound) { System.out.println("Customer found."); } else { System.out.println(k + " is not a registered customer, try again."); } }
关键修改点:
- 新增
isCustomerFound布尔变量,初始为false,用来跟踪是否找到匹配的客户 - 将输出逻辑从循环内部移到循环外部,确保无论结果如何都只打印一次
- 找到匹配后用
break终止循环,避免不必要的遍历,提升效率 - 移除了无意义的嵌套
for循环,精简代码
这样修改后,输入已注册的客户名称只会输出一次Customer found.;如果输入未注册的名称,也只会输出一次对应的提示信息。
内容的提问来源于stack exchange,提问作者Fragg
相关产品推荐
相关产品推荐

