java 合并/连接两个整数数组

yb3bgrhw  于 2023-06-20  发布在  Java
关注(0)|答案(3)|浏览(143)

我是Java新手,我知道有很多更好的方法来连接两个数组,比如使用IntStream.concat方法,但是我想学习,我更喜欢用这种方法
我尝试用下面的函数连接两个整数数组

public static int[] mergeAndOrder(int[] array1, int[] array2) {

    int [] tmp= new int [array1.length+ array2.length];
    int k=array1.length;
    for(int i=0; i<array1.length; i++)
    {
        tmp[i]=array1[i];
    }

    for(int i=0; i< array2.length; i++)
    {
        tmp[k]=array2[i];
        k++;
    }
    return tmp;
}

对吗?
它似乎没有连接两个整数数组

6l7fqoea

6l7fqoea1#

我觉得你的方法应该行得通。我写了一个简单的测试来证明它:

@Test
public void test()
{
    int[] a = {1, 2, 3};
    int[] b = {2, 3, 4};

    int[] expected = {1, 2, 3, 2, 3, 4};
    int[] actual = mergeAndOrder(a, b);

    log.info(Arrays.toString(a));
    log.info(Arrays.toString(b));
    log.info(Arrays.toString(actual));

    assertThat(actual, is(expected));
}

我的日志声明似乎同意:

2023-06-19 13:48:34,953 INFO  [] (main) [1, 2, 3]
2023-06-19 13:48:34,968 INFO  [] (main) [2, 3, 4]
2023-06-19 13:48:34,968 INFO  [] (main) [1, 2, 3, 2, 3, 4]

像user 16320675一样,我想知道为什么你认为它没有连接两个数组;似乎起作用了。

nkcskrwz

nkcskrwz2#

是的,这是正确的。
我用下面的代码测试了一下。

int[] array1 = { 1, 2, 3, 4, 5 };
int[] array2 = { 6, 7, 8, 9, 10 };
int[] array3 = mergeAndOrder(array1, array2);

System.out.println(Arrays.toString(array3));

输出量

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

你可以在这里的 for-loop-place k 中添加多个变量。

for(int i=0, k=array1.length; i< array2.length; i++, k++)
{
    tmp[k]=array2[i];
}

值得注意的是,这个典型的过程通常使用 System#arraycopy 方法完成。

int [] tmp= new int [array1.length+ array2.length];

System.arraycopy(array1, 0, tmp, 0, array1.length);
System.arraycopy(array2, 0, tmp, array1.length, array2.length);

作为演示,这里有一个使用单个 while-loop 的示例。

public static int[] mergeAndOrder(int[] array1, int[] array2) {

    int [] tmp= new int [array1.length+ array2.length];

    int indexA = 0, indexB = 0;
    boolean exit = false;
    while (!exit) {
        if (indexA < array1.length) tmp[indexA] = array1[indexA++];
        if (indexB < array2.length) tmp[array1.length + indexB] = array2[indexB++];
        if (indexA == array1.length && indexB == array2.length) exit = true;
    }

    return tmp;
}
gajydyqb

gajydyqb3#

谢谢大家的回应
我刚刚测试了@Reilas上面所说的功能,它工作了。另外,谢谢你的提示,我不知道在for循环中创建另一个int。
我被困在一个有竞争力的编码网站来解决这个问题,它给了我错误,我认为功能有问题。

相关问题