【问题标题】:Printing two arrays inside of a third array that has the same combined length as the first two在与前两个​​具有相同组合长度的第三个数组内打印两个数组
【发布时间】:2017-03-10 15:12:50
【问题描述】:

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

例子:

数组 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]);
    }

【问题讨论】:

  • 您可以在一个语句中初始化和分配一个变量,即int length = 5; 而不是int length;length = 5
  • 我应该在原帖中添加这个,数组长度必须是用户输入的数字。
  • 您可以编辑您的原始帖子;)
  • 我假设这是一个赋值,你不能使用任何为你组合数组的高级函数?
  • @McNasty49,到目前为止有任何答案对您有帮助吗?

标签: java arrays


【解决方案1】:

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

//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));

输出

Array 1:[1, 4, 2, 6, 0]
Array 2:[3, 6, 2, 1, 5]
Array 3:[1, 4, 2, 6, 0, 3, 6, 2, 1, 5]

【讨论】:

  • 有趣的答案!至今没用过System.arraycopy
【解决方案2】:

一种选择是只遍历前两个数组并填充第三个数组:

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]);
}

【讨论】:

  • 我很抱歉花了这么长时间才回复;这正是我所需要的!
【解决方案3】:

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

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

我不会多说,因为你说这是功课,不想作弊:)

【讨论】:

    【解决方案4】:

    有一个很好的 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);
    }
    

    【讨论】:

      【解决方案5】:

      有两种 (+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 中使用IntStream concat(IntStream a, IntStream b) 连接两个流,您可以使用java.util.Arrays.stream(int[]) 创建。

      【讨论】:

        【解决方案6】:

        您可以使用 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);
        }
        

        【讨论】:

        • 这个答案并不能帮助 OP 解决他的任务和理解问题。
        • @mike 感谢您指出这一点。我在答案中添加了另一个示例,这将帮助 OP 解决他的任务。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 2020-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多