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

使用ArrayList排序元素后平方 出现末尾结果重复输出问题排查

问题根因

  • 内层循环触发逻辑异常:当外层循环走到最后一个元素时(i = tempList.size() - 1),内层循环的判断条件j > i永远不成立,不会进入内层给result赋值,所以result会复用前一轮循环结束时的值,也就是倒数第二个元素的平方,这是输出重复值的直接原因。
  • 整体逻辑不符合需求:现有嵌套循环是冒泡排序的框架,但既没有执行元素交换的排序操作,也没有针对每个元素单独计算平方,result的赋值完全依赖内层循环最后一次比较的结果,就算修复最后一轮的问题,输入带负数的列表时结果也会完全错误。
  • 相等元素处理缺失:仅写了大于、小于的判断分支,如果列表里有相等的元素,result不会被重新赋值,会复用上一次的结果。

修复方案

如果输入列表是升序排列的,推荐用更高效的双指针法计算有序平方数组,不需要嵌套循环:

public static void sortSquares(List<Integer> tempList) {
    int n = tempList.size();
    int[] res = new int[n];
    int left = 0, right = n - 1, index = n - 1;
    while (left <= right) {
        int leftSquare = tempList.get(left) * tempList.get(left);
        int rightSquare = tempList.get(right) * tempList.get(right);
        if (leftSquare > rightSquare) {
            res[index--] = leftSquare;
            left++;
        } else {
            res[index--] = rightSquare;
            right--;
        }
    }
    // 输出结果
    for (int num : res) {
        System.out.println(num);
    }
}

如果输入列表是无序的,直接先排序再逐个计算平方即可,需提前导入java.util.Collections:

public static void sortSquares(List<Integer> tempList) {
    // 先排序
    Collections.sort(tempList);
    for (int num : tempList) {
        System.out.println(num * num);
    }
}

内容的提问来源于stack exchange,提问作者Sslur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:45:02