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; } }
关键修复点说明
- 调用排序方法:在main方法中添加
arr = sortArray(arr);,让排序逻辑真正执行。 - 正确处理Stream排序:通过
collect(Collectors.toList())将排序后的Stream转换为新List,得到有序的奇数集合。 - 替换奇数的正确逻辑:用
oddIndex变量跟踪当前要取用的排序后奇数,每替换一个就自增索引,确保每个奇数位置对应排序后的正确元素。
运行修复后的代码,输出结果为1,3,4,6,7,9,8,2,奇数部分已按升序排列。
内容的提问来源于stack exchange,提问作者Truong Nguyen Quoc
相关产品推荐
相关产品推荐

