如何将嵌套for循环代码改写为增强for循环?求技术解析
改写为增强for循环的实现方案
没问题,我来帮你把这段代码改成增强for循环版本,顺便帮你理清楚核心逻辑~
首先明确你原代码的功能:遍历arrayA的每一个元素,再遍历arrayB的每一个元素,找到两个数组中相等的元素就添加到arrayC中(会保留重复匹配的结果,比如如果arrayA有多个相同元素且在arrayB中存在,都会被加入arrayC)。
下面是用增强for循环改写后的完整代码:
int[] arrayA = {3, 35, 2, 1, 45, 92, 83, 114}; int[] arrayB = {4, 83, 5, 9, 114, 3, 7, 1}; int[] arrayC = new int[arrayA.length + arrayB.length]; int k = 0; // 增强for循环遍历arrayA的每个元素 for (int numA : arrayA) { // 增强for循环遍历arrayB的每个元素 for (int numB : arrayB) { if (numB == numA) { arrayC[k++] = numA; } } } // 可选:打印验证结果(只输出已填充的元素,避免末尾默认0) for (int i = 0; i < k; i++) { System.out.print(arrayC[i] + " "); }
关键改动说明:
- 把原来基于索引的
for (int i = 0; i < n; i++)改成for (int numA : arrayA),直接遍历数组中的每个元素,不需要手动维护索引和数组长度,代码更简洁易读。 - 内层循环同理,
for (int j = 0; j < m; j++)改为for (int numB : arrayB),逻辑和原代码完全一致,只是写法更符合Java的增强遍历语法。 - 变量
k仍然需要保留,因为我们需要追踪arrayC中已填充元素的位置,增强for循环无法替代这个计数功能。
额外优化提示(可选):
原代码的逻辑会产生重复的交集元素(比如如果arrayA里有两个3,arrayB里有一个3,arrayC会加入两个3)。如果你的需求是去重的交集,可以用Set辅助优化,比如:
import java.util.HashSet; import java.util.ArrayList; import java.util.List; // 先把arrayB转成Set,提高查找效率 HashSet<Integer> setB = new HashSet<>(); for (int num : arrayB) { setB.add(num); } // 收集交集元素 List<Integer> tempList = new ArrayList<>(); for (int num : arrayA) { if (setB.contains(num)) { tempList.add(num); // 如果要去重,可在此处移除setB中的元素:setB.remove(num); } } // 转成最终数组 int[] arrayC = tempList.stream().mapToInt(Integer::intValue).toArray();
不过这是额外的功能优化,如果你只是需要保持原逻辑的增强for循环改写,前面的代码就完全满足需求。
内容的提问来源于stack exchange,提问作者winnergo
相关产品推荐
相关产品推荐

