Java新手求助:使用for loop实现下一个客户ID查找程序
嘿,刚入门Java的话这个问题真的很适合练手!我来一步步帮你拆解怎么用for loop搞定它~
先理清楚需求
你的示例输入是5 2 3 5 4 1,输出是6——本质是要找出最小的未被使用的正整数客户ID。这里第一个数字5是已有的ID总数,后面的数字是打乱的已存在ID,因为1到5都被用了,所以下一个就是6。如果是比如输入4 1 3 4,那下一个ID就是2啦。
用纯for循环实现的Java代码
对于新手来说,先从纯for循环的版本入手,能更好理解基础逻辑:
import java.util.Scanner; public class NextCustomerIdFinder { public static void main(String[] args) { Scanner inputScanner = new Scanner(System.in); // 第一步:读取输入里的ID总数 int totalExistingIds = inputScanner.nextInt(); // 创建数组来存所有已有的ID int[] existingIds = new int[totalExistingIds]; // 用for循环把所有ID读进数组里 for (int i = 0; i < totalExistingIds; i++) { existingIds[i] = inputScanner.nextInt(); } int nextId = 1; boolean isNextIdFound = false; // 核心逻辑:从1开始逐个检查是否被使用 while (!isNextIdFound) { boolean idExists = false; // 内层for循环遍历已有的ID,判断当前nextId是否存在 for (int currentId : existingIds) { if (currentId == nextId) { idExists = true; break; // 找到就不用继续遍历了 } } if (!idExists) { isNextIdFound = true; // 找到未被使用的ID啦 } else { nextId++; // 这个ID被用了,检查下一个 } } System.out.println("下一个客户ID是" + nextId); inputScanner.close(); } }
代码逐行解释
- 先用
Scanner读取输入,第一个数字是已有的ID总数,接着用for循环把后面的所有ID存入数组。 - 我们从
nextId=1开始检查(因为客户ID一般从1开始对吧):- 内层用for循环遍历已有的ID数组,看看当前
nextId是不是已经被用了。 - 如果找到相同的ID,说明这个数被用了,就把
nextId加1继续检查。 - 如果遍历完所有ID都没找到相同的,那这个
nextId就是我们要的答案。
- 内层用for循环遍历已有的ID数组,看看当前
- 最后输出结果,比如你的示例输入,程序会依次检查1、2、3、4、5(都存在),然后检查6(不存在),就输出6啦。
可选的优化版本(用集合简化代码)
如果你已经接触过集合的话,可以用HashSet来代替数组,这样查找ID是否存在会更高效,代码也更简洁:
import java.util.HashSet; import java.util.Scanner; public class NextCustomerIdFinder { public static void main(String[] args) { Scanner inputScanner = new Scanner(System.in); int totalExistingIds = inputScanner.nextInt(); HashSet<Integer> existingIdSet = new HashSet<>(); // 用for循环把ID加入集合 for (int i = 0; i < totalExistingIds; i++) { existingIdSet.add(inputScanner.nextInt()); } int nextId = 1; // 用while循环代替内层for,直接用集合的contains方法判断 while (existingIdSet.contains(nextId)) { nextId++; } System.out.println("下一个客户ID是" + nextId); inputScanner.close(); } }
这个版本核心逻辑和纯for循环是一样的,只是用集合的contains方法替代了手动写的内层for循环,效率更高,代码也更短~
内容的提问来源于stack exchange,提问作者sindhu
相关产品推荐
相关产品推荐

