首页 > 解决方案 > 在java中按升序合并2个排序数组

问题描述

我正在尝试在 java 中合并 2 个升序排序数组。我是java新手,所以我无法理解。以下代码有什么问题?

import java.lang.Math;
import java.util.Scanner;

public class Main
{   
  public static void main(String[] args) {
    int[] a = {10, 20, 30, 40};
    int[] b = {50, 60, 70, 80};
    int[] z = merge(a, b);
    System.out.println(z);
  }

  public static int[] merge(int[] a, int[] b) {
    int[] result = new int[a.length + b.length];
    int indexResult = 0;
    int indexA = 0;
    int indexB = 0;

    while (indexResult < result.length) {
      if (indexB >= a.length || a[indexA] <= b[indexB])
        result[indexResult++] = b[indexB++];
      else
        result[indexResult++] = a[indexA++]; 
    }
    return result;
   }
 }

我的错误是

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4                                                                         
        at Main.merge(Main.java:30)                                                                                                            
        at Main.main(Main.java:15)

标签: javaarraysmerge

解决方案


indexB >= a.length应替换为indexA >= a.length.

以下代码可能会有所帮助

import java.lang.Math;
import java.util.Scanner;
public class Main
{   
public static void main(String[] args) {
     int[] a = {10, 20, 30, 40};
    int[] b ={50,60,70,80};
    int[] z=merge( a, b);
    for(int x: z)
        System.out.println(x);

}
public static int[] merge(int[] a, int[] b) {

        int[] result = new int[a.length + b.length];
        int indexResult = 0;
        int indexA = 0;
        int indexB = 0;

        while (indexResult < result.length) {
            if (indexA >= a.length || a[indexA] >= b[indexB])
                result[indexResult++] = b[indexB++];
            else
                result[indexResult++] = a[indexA++];
        }
        return result;
    }
}

输出:-

10
20
30
40
50
60
70
80

推荐阅读