合并数组后用Arrays.sort排序无法打印,请求排查问题
问题分析与解决:数组排序后打印异常
嘿,我帮你找到了问题的根源!你代码里的排序逻辑本身没问题,但数组初始化的长度和实际有效元素不匹配,导致排序结果完全不符合预期。
问题出在哪?
你看,你初始化a和b的时候都是固定长度50的数组,但实际只用到了用户输入的size1和size2个元素。然后你创建merge数组时用了a.length + b.length,也就是100个元素的长度——但真正有意义的元素只有前size1 + size2个,剩下的100 - (size1+size2)个元素都是int数组默认的0。
当你调用Arrays.sort(merge);时,它会对整个100个元素进行排序,所有的0都会被排到数组最前面。而你打印的时候只取前size1+size2个元素,这就导致你看到的结果里会有一堆0,而不是你期望的、仅对输入元素排序后的结果。
两种解决办法
方法1:创建刚好长度的merge数组
直接根据实际有效元素的长度来初始化merge数组,这样就不会有多余的0元素干扰排序:
// 把原来的merge数组初始化代码改成这样 int merge[] = new int[size1 + size2];
方法2:只对有效元素区间排序
如果你想保留原来的数组初始化方式(比如后续还要用到多余的空间),可以用Arrays.sort的重载方法,只对前size个有效元素排序:
// 替换原来的Arrays.sort(merge); Arrays.sort(merge, 0, size);
修改后的完整代码示例(用方法1)
import java.util.Arrays; import java.io.*; import java.util.Scanner; public class leetcode4Again { public static void main(String args[]) throws IOException { int a[] = new int[50]; int b[] = new int[50]; int count = 0, size1, size2, size; int i = 0, k; Scanner scan = new Scanner(System.in); System.out.print("Enter Array 1 Size : "); size1 = scan.nextInt(); System.out.print("Enter Array 1 Elements : "); for (i = 0; i < size1; i++) { a[i] = scan.nextInt(); } System.out.print("Enter Array 2 Size : "); size2 = scan.nextInt(); System.out.print("Enter Array 2 Elements : "); for (i = 0; i < size2; i++) { b[i] = scan.nextInt(); } System.out.print("Merging the Arrays...\n"); // 这里改成按实际有效长度初始化merge数组 int merge[] = new int[size1 + size2]; for (i = 0; i < size1; i++) { merge[i] = a[i]; } size = size1 + size2; for (i = 0, k = size1; k < size && i < size2; i++, k++) { merge[k] = b[i]; } Arrays.sort(merge); System.out.print("Now the New Array after Merging is :\n"); for (i = 0; i < size; i++) { System.out.print(merge[i] + " "); } } }
这样修改后,排序就只会针对你输入的有效元素进行,打印出来的结果就是正常的排序后的合并数组啦!
内容的提问来源于stack exchange,提问作者1KT1
相关产品推荐
相关产品推荐

