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

Java新手求助:数组中的奇数无法完成升序排序

问题分析与修复方案

你的代码存在三个核心问题,直接导致排序功能失效:

  • 未触发排序逻辑:main方法仅打印原数组,完全没调用sortArray方法,排序代码根本没执行。
  • Stream排序未生效:list.stream().sorted()不会修改原List,Stream操作是返回新流,必须把结果收集回新集合才会得到排序后的奇数。
  • 奇数替换逻辑错误:内层循环会把每个奇数位置反复赋值为List的最后一个元素,正确做法是用单独索引遍历排序后的奇数,逐个替换原数组中的奇数。

修复后的完整代码

package Java1;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class StringB1 {
    public static void main(String[] args) {
        int arr[] = {1,3,4,6,9,7,8,2};
        // 调用排序方法处理数组
        arr = sortArray(arr);
        // 打印处理后的结果
        for (int e : arr) {
            System.out.println(e);
        }
    }

    public static int[] sortArray(int[] array) {
        List<Integer> list = new ArrayList<>();
        // 收集原数组中的所有奇数
        for (int e : array) {
            if (e % 2 != 0) {
                list.add(e);
            }
        }
        // 对奇数列表排序并收集为新集合
        List<Integer> sortedOdds = list.stream().sorted().collect(Collectors.toList());
        // 用索引跟踪排序后的奇数位置
        int oddIndex = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 != 0) {
                // 逐个替换原数组中的奇数
                array[i] = sortedOdds.get(oddIndex);
                oddIndex++;
            }
        }
        return array;
    }
}

关键修复点说明

  1. 调用排序方法:在main方法中添加arr = sortArray(arr);,让排序逻辑真正执行。
  2. 正确处理Stream排序:通过collect(Collectors.toList())将排序后的Stream转换为新List,得到有序的奇数集合。
  3. 替换奇数的正确逻辑:用oddIndex变量跟踪当前要取用的排序后奇数,每替换一个就自增索引,确保每个奇数位置对应排序后的正确元素。

运行修复后的代码,输出结果为1,3,4,6,7,9,8,2,奇数部分已按升序排列。

内容的提问来源于stack exchange,提问作者Truong Nguyen Quoc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:17:35