有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java合并两个数组并缩短合并后的数组

我的家庭作业是“取两个给定的数组(已排序,例如{1,2,3}),创建一个包含两个数组的新数组,然后对其进行排序”,我们有一个函数对数组进行排序,所以这不是问题,但对我来说有点复杂,下面是我的代码:

public static Scanner in = new Scanner(System.in);

    public static void main(String[] args) {
        int[] a = new int[3];
        int[] b = new int[5];
        Help_arr.scan(a);
        Help_arr.scan(b);
        Help_arr.print(peula(a, b));
    }

    public static int[] peula(int[] a1, int[] b1) {
        int[] c = new int[a1.length + b1.length];
        for (int i = 0; i < a1.length; i++)
            c[i] = a1[i];
        for (int i = a1.length; i < c.length; i++){
            c[i] = b1[i];
        }
        Help_arr.sortup(c);
        return c;
    }

Help_arr类使用的函数:

1)扫描阵列:

public static void scan(int[] arr1) {
    for (int i = 0; i < arr1.length; i++) {
        System.out.println("Enter number" + (i + 1));
        arr1[i] = in.nextInt();
    }
}

2)打印阵列:

public static void print(int[] arr1) {
    for (int i = 0; i < arr1.length; i++) {
        System.out.print(arr1[i] + " ");
    }
}

3)整理数组:

public static void sortup(int[] arr1) {
    int i, mini, temp, j;
    for (j = 0; j < arr1.length; j++) {
        mini = j;
        for (i = j; i < arr1.length; i++) {
            if (arr1[i] < arr1[mini])
                mini = i;
        }
        temp = arr1[j];
        arr1[j] = arr1[mini];
        arr1[mini] = temp;
    }
}

我在c[i]=b1[i];行中得到一个错误。数组超出了索引界限,但我遵循了代码,这个for将运行until i=7 as the c.length is 8,这是可能的。但也许我遗漏了什么,这里是错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    at arrays.PgRonTargilMivhan.peula(PgRonTargilMivhan.java:21)
    at arrays.PgRonTargilMivhan.main(PgRonTargilMivhan.java:13)

共 (2) 个答案

  1. # 1 楼答案

    问题在于这段代码:

    for (int i = a1.length; i < c.length; i++){
           c[i] = b1[i];
    

    这里的b1索引应该以0开头,但您是以a1.length开头的。你应该为b1建立一个单独的索引,或者使用b1[i-a1.length]

  2. # 2 楼答案

    请找出逻辑

    问题在于你对数组b使用了“i”索引

    解决方案如下。祝你好运

    int[] c = new int[a.length + b.length];
        int i = 0;
        for (i = 0; i < a.length; i++)
            c[i] = a[i];
        for (int j = 0; j < b.length; j++)
            c[i] = b[j];
        }