在第三个阵列中打印两个阵列,其长度与前两个

时间:2017-03-10 15:12:50

标签: java arrays

我需要做的是创建第三个动态数组(我想我做了),它结合了前两个的长度,然后将这些数组的内容打印出来作为第三个数组的输出。

示例:

数组1: 1 4 2 6 0

数组2: 3 6 2 1 5

阵列3: 1 4 2 6 0 3 6 2 1 5

这是我到目前为止所做的:

import javax.swing.*;

public class DynamicArray
{
    public static void main(String[] args)
    {
        // User Input - Array length
        int arrayLength;
        arrayLength = Integer.parseInt(JOptionPane.showInputDialog("Enter Array length:"));

        // First dynamic array
        int[] dynArray1;
        dynArray1 = new int[arrayLength];

        for (int i = 0; i < dynArray1.length; i++)
        {
            dynArray1[i] = (int) (Math.random() * 10);
        }

        System.out.println("First Array:");

        for (int j = 0; j < dynArray1.length; j++)
        {
            System.out.println(dynArray1[j]);
        }

        // Second dynamic array
        int[] dynArray2;
        dynArray2 = new int[arrayLength];

        for (int i = 0; i < dynArray2.length; i++)
        {
            dynArray2[i] = (int) (Math.random() * 10);
        }

        System.out.println("Second Array:");

        for (int j = 0; j < dynArray2.length; j++)
        {
            System.out.println(dynArray2[j]);
        }

        // Third dynamic array
        int thirdArrayLength = dynArray1.length + dynArray2.length;
        int[] dynArray3;
        dynArray3 = new int[thirdArrayLength];

        for (int i = 0; i < dynArray3.length; i++)
        {

        }
    }
}

我会打印第一个和第二个,但我认为这将是作弊,并不是我的任务所要求的。我打算用于循环Array1和Array2并打印结果。我不确定应该如何处理它。任何帮助将不胜感激。

编辑:这已经解决了!以下是代码:

    /* Third dynamic array */
    int thirdArrayLength = dynArray1.length + dynArray2.length;
    int[] dynArray3;
    dynArray3 = new int[thirdArrayLength];

    for (int i=0; i < dynArray1.length; i++) {
        dynArray3[i] = dynArray1[i];
    }
    for (int i=0; i < dynArray2.length; ++i) {
        dynArray3[i + dynArray1.length] = dynArray2[i];
    }

    System.out.println("Third Array:");

    for (int i=0; i < dynArray3.length; ++i) {
        System.out.println(dynArray3[i]);
    }

6 个答案:

答案 0 :(得分:1)

如果您使用的是Java-8,则可以使用ArraysSystem.arraycopy

vagrant up

<强>输出

//your array
int array1[] = {1, 4, 2, 6, 0};
int array2[] = {3, 6, 2, 1, 5};

//create a new array witch have length array1.length + array2.length
int array3[] = new int[array1.length + array2.length];

//copy the first array1 in array3
System.arraycopy(array1, 0, array3, 0, array1.length);
//copy the second array2 in array3
System.arraycopy(array2, 0, array3, array1.length, array2.length);

//display your arrays
System.out.println("Array 1:" + Arrays.toString(array1));
System.out.println("Array 2:" + Arrays.toString(array2));
System.out.println("Array 3:" + Arrays.toString(array3));

答案 1 :(得分:0)

一种选择是迭代前两个数组并填充第三个数组:

for (int i=0; i < dynArray1.length; i++) {
    dynArray3[i] = dynArray1[i];
}
for (int i=0; i < dynArray2.length; ++i) {
    dynArray3[i + dynArray1.length] = dynArray2[i];
}

// then print out the third array
for (int i=0; i < dynArray3.length; ++i) {
    System.out.println(dynArray3[i]);
}

答案 2 :(得分:0)

一旦用户输入前两个数组,您就可以创建第三个数组。长度,然后在打印其内容的两个for循环中,您还可以填充第三个数组。

在这种情况下,您必须注意第二个for计数器,该计数器将从零开始但必须增加,因为已经填充了第三个数组的一部分。

我不会说更多,因为你说它的功课并且不想作弊:)。

答案 3 :(得分:0)

这是一个很好的Apache Commons库方法:http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/ArrayUtils.html#addAll%28T%5B%5D,%20T...%29

int[] dynArray3 = (int[])ArrayUtils.addAll(dynArray1, dynArray2);

for(int i : dynArray3) {
    System.out.println(i);
}

答案 4 :(得分:0)

您可以使用Java 8的stream按顺序迭代两个数组,例如:

public static void main(String[] args) throws Exception{
    int[] array1 = {1,2,4}, array2 = {4,5,6};
    Stream.of(array1, array2)
    .flatMapToInt(s -> Arrays.stream(s))
    .forEach(System.out::println);
}

<强>更新

如果要合并/连接两个数组,则在此流中添加Collector,这将生成一个列表,例如:

public static void main(String[] args) throws Exception{
    int[] array1 = {1,2,4}, array2 = {4,5,6};
    List<Integer> list = Stream.of(array1, array2)
    .flatMapToInt(s -> Arrays.stream(s))
    .boxed()
    .collect(Collectors.toList());
}

这会为您提供Integer的列表,然后您可以将其转换为int[]数组,如下所示:

int[] array = new int[list.size()];
for(int i=0 ; i<list.size() ; i++){
    array[i] = list.get(i);
}

答案 5 :(得分:0)

有两种(+1)可能性。

循环目标数组

你可以循环第三个数组(就像你现在一样),并使用if,它可以帮助你确定是否应该访问第一个或第二个数组。

if (i > array1.length) {
    array3[i] = array2[i - array1.length];
else
    array3[i] = array1[i];
}

遍历两个源数组

或者您可以使用两个专用循环遍历第一个和第二个数组,并将它们的值分配给第三个数组。但是,迭代array2的第二个循环必须使用偏移来索引第三个数组。

    array3[i +  array1.length] = array2[i];

Java8的Stream API

使用IntStream concat(IntStream a, IntStream b)中的IntStream来连接两个流,您可以使用java.util.Arrays.stream(int[])创建这些流。