【问题标题】:Copying two arrays into one array将两个数组复制到一个数组中
【发布时间】:2018-04-01 04:38:06
【问题描述】:

问题是编写一个程序,它需要两个数组,每个数组包含 10 个整数,a 和 b。 c 是一个包含 20 个整数的数组。程序应该将数组a和b放入数组c中,c的前10个整数来自数组a,后10个整数来自b。然后程序应该显示 c。这是我到目前为止的代码。它将arrayA中的值打印到arrayC中,但我不知道如何在不覆盖arrayC(arrayB)中已经存在的信息的情况下将arrayB中的值打印到arrayC中。

public class questionTwo
{
  public static void main(String[] args)
  {
    int [] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57};
    int [] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2};
    int [] arrayC = new int [20];

    for (int i = 0; i < arrayA.length; i++)
      arrayC[i] = arrayA[i];

    for (int i = 0; i < arrayB.length; i++)
    {
      int element = 9;
      arrayC[element] = arrayB[i];
      element++;
    }


    System.out.println("The values of ArrayC are: ");

    for(int val : arrayC)
    {
      System.out.println(val);
    } 

  }
}

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    在解释如何修复当前代码之前,我首先建议您使用arrayAarrayB 的长度创建arrayC(此处具有相同的实用结果,但是它的优点是您可以在不修改代码的情况下向arrayAarrayB 添加更多元素)。接下来,在实际代码中,我将使用System.arraycopy 来执行复制。并使用Arrays.toString(int[]) 进行打印。喜欢,

    int[] arrayA = { 31, 14, 5, 12, 50, 80, 100, 29, 58, 57 };
    int[] arrayB = { 9, 13, 156, 78, 36, 46, 86, 98, 63, 2 };
    int[] arrayC = new int[arrayA.length + arrayB.length];
    System.arraycopy(arrayA, 0, arrayC, 0, arrayA.length);
    System.arraycopy(arrayB, 0, arrayC, arrayA.length, arrayB.length);
    System.out.println(Arrays.toString(arrayC));
    

    至于您的原始代码,请使用arrayA.lengthi 来获得正确的偏移量。喜欢,

    int[] arrayC = new int[arrayA.length + arrayB.length];
    for (int i = 0; i < arrayA.length; i++) {
        arrayC[i] = arrayA[i];
    }
    for (int i = 0; i < arrayB.length; i++) {
        arrayC[i + arrayA.length] = arrayB[i];
    }
    

    【讨论】:

      【解决方案2】:

      你真的很亲密!您的第二个循环每次都将 element 初始化为 9,而您应该只在开始时将其分配给 10 一次:

      int element = 10;
      for (int i = 0; i < arrayB.length; i++)
      {
        arrayC[element] = arrayB[i];
        element++;
      }
      

      【讨论】:

      • “成功了!”:你确定吗?你应该得到31, 14, 5, 12, 50, 80, 100, 29, 58, 57, 9, 13, 156, 78, 36, 46, 86, 98, 63, 2 作为你的最终结果,但我敢打赌你得到了31, 14, 5, 12, 50, 80, 100, 29, 58,9, 13, 156, 78, 36, 46, 86, 98, 63, 2, 0element 应该从 10 点开始(或者更好的是,arrayA.length,而不是 9 点。
      • 是的,我注意到了这个错误,所以我将它设置为 10 并且它起作用了
      • 好消息@KevinAnderson
      【解决方案3】:

      第二个循环是错误的。您可以使用以下代码:

      int [] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57};
      int [] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2};
      int [] arrayC = new int [20];
      
      System.arraycopy(arrayA, 0, arrayC, 0, arrayA.length);
      System.arraycopy(arrayB, 0, arrayC, arrayA.length, arrayB.length);
      
      System.out.println("The values of ArrayC are: ");
      
      for(int val : arrayC) {
          System.out.println(val);
      }
      

      【讨论】:

        【解决方案4】:

        您的第二个循环不正确,因为您每次都在循环内将element 设置为9;因此,它的值总是在开始下一次迭代时重置。您可以将其移出循环以实现您正在寻找的结果。另外,我建议根据arrayAarrayB 的长度构造arrayC,这样您就可以组合任意长度的数组。

        此外,我还建议移动代码以将数组组合为一种方法,以保持事物的清洁和可重用性,以备将来使用。

        public class questionTwo {
        
          private static int[] combineArrays(int[] arrayA, int[] arrayB) {
            int[] arrayC = new int[arrayA.length + arrayB.length];
            int idx = 0;
        
            for (int x : arrayA) {
               arrayC[idx] = x;
               idx++;
            }
        
            for (int x : arrayB) {
               arrayC[idx] = x;
               idx++;
            }
        
            return arrayC;
          }
        
          public static void main(String[] args) {
            int[] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57};
            int[] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2};
        
            int[] arrayC = combineArrays(arrayA, arrayB);
        
            System.out.println("The values of ArrayC are: ");
        
            for(int val : arrayC) {
              System.out.println(val);
            } 
          }
        
        }
        

        此外,使用 Java 的原始数组通常被认为是一种糟糕的做法。查看List 和相关对象以获得更灵活和功能齐全的选项。

        【讨论】:

          【解决方案5】:

          当您需要向数组中添加更多项目时,使您的函数动态化。我还没有测试,但我希望它可以工作。

          public class questionTwo
          {
            public static void main(String[] args)
            {
              int [] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57};
              int [] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2};
              int [] arrayC = new int [arrayA.length + arrayB.length];
          
              for (int i = 0; i < arrayA.length; i++)
                arrayC[i] = arrayA[i];
          
              int element = arrayA.length;
              for (int i = 0; i < arrayB.length; i++)
              {
                arrayC[element+i] = arrayB[i];
              }
          
              System.out.println("The values of ArrayC are: ");
          
              for(int val : arrayC)
              {
                System.out.println(val);
              } 
          
            }
          }
          

          【讨论】:

            猜你喜欢
            • 2022-07-05
            • 2020-10-17
            • 2017-09-13
            • 1970-01-01
            • 2012-11-13
            • 2011-05-14
            • 1970-01-01
            • 1970-01-01
            • 2011-05-08
            相关资源
            最近更新 更多