You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:27:12