连接2个数组的输出不符合预期

时间:2015-12-05 08:24:10

标签: java arrays

  

给定两个已按降序排序的数组arr1和arr2,输出一个数组,该数组在按降序排序时附加arr1和arr2的值。

MyApproach

我发现2-3个链接很有用,我注意到我在这里有类似的代码。但是我无法获得预期的输出。

我的一个资源:How to merge two sorted arrays into a sorted array?

  

任何人都可以指导我做错了吗。

我已经为array1的长度> = array2的长度做了代码,我将稍后添加其他部分

numpy.savez()

public int[] join(int[] arr1,int[] arr2) { int l1=arr1.length; int l2=arr2.length; int i=0,j=0,k=0; int c[]=new int[arr1.length+arr2.length]; if(l1>=l2) { for(;i<arr1.length;) { if(arr1[i]>=arr2[j]) { c[k]=arr1[i++]; System.out.println(c[k]); k++; } else if(arr2[j]>arr1[i]) { c[k]=arr2[j++]; System.out.println(c[k]); k++; } } //System.out.println(j); //System.out.println(i); while(i<arr1.length) { c[k]=arr1[i++]; System.out.println(c[k]); k++; } while(j<arr2.length) { c[k]=arr2[j++]; System.out.println(c[k]); k++; }` } return c; //write your code here } Parameters ActualOut Expected Out null {100,90,80,70,60}

2 个答案:

答案 0 :(得分:2)

这可能是支持conditional operator ? :(a ternary operation)的最佳理由。对于您的问题,您需要防范null输入。然后,您可以利用System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)在循环后复制剩余的元素。像

这样的东西
public static int[] join(int[] arr1, int[] arr2) {
    if (arr1 == null) {
        return arr2;
    } else if (arr2 == null) {
        return arr1;
    }
    int p = 0, i = 0, j = 0;
    int[] out = new int[arr1.length + arr2.length];
    while (i < arr1.length && j < arr2.length) {
        out[p++] = (arr1[i] > arr2[j]) ? arr1[i++] : arr2[j++];
    }
    if (i < arr1.length) {
        System.arraycopy(arr1, i, out, p, arr1.length - i);
    } else if (j < arr2.length) {
        System.arraycopy(arr2, j, out, p, arr2.length - j);
    }
    return out;
}

我测试的是

public static void main(String args[]) {
    int[][] tests = { { 3, 2, 1 }, { 10, 9, 7 }, { 6, 5, 4 } };
    System.out.println(Arrays.toString(join(tests[0], join(tests[1], tests[2]))));
}

而且,我得到了

[10, 9, 7, 6, 5, 4, 3, 2, 1]

答案 1 :(得分:2)

虽然我认为Elliot的答案是最好的方法,但我对如何坚持使用代码并使其工作有一些建议。

首先,在您的for循环中,您的函数开始时,条件为i < l1 && j < l2,而不是只检查i(如果您要声明变量,也是如此)对于数组的长度,使用它们!)。这使您可以摆脱if (l1 >= l2)检查,无论哪个数组更长,都可以使用它。

否则,您的代码似乎功能齐全。我建议的另一个提示是制作join方法static。这允许您通过简单地调用join (someArr1, someArr2)而不是SomeObject.join(someArr1, someArr2)来独立调用它(因为join中使用的所有变量都是本地变量,而不是SomeObject的实例变量。< / p>