【问题标题】:appending 2 2D arrays without arraycopy在没有arraycopy的情况下附加2个二维数组
【发布时间】:2020-03-11 23:54:09
【问题描述】:

我需要在不使用 arraycopy 的情况下附加 2 个二维数组,并按顺序,首先是 arr1,然后是 arr2,如下所示:

int[][] arr1 = {{1,2},{7,9,10}};
int[][] arr2 = {{3,5,7,9},{16,10,11}}; 
int[][] arr3 = append(arr1,arr2);
result should be:
1 2 
7 9 10 
3 5 7 9 
16 10 11 

我试过了:

    public static int[][] append(int[][] arr1, int[][] arr2) {
    int [][] arr3 = new int [arr1.length + arr2.length][];
    for (int i=0; i<arr1.length; i=i+1) {
        for (int j=0; j<arr1[i].length; j=j+1) {
            arr3[i][j] = arr1[i][j];
        }
    }
    for (int x=arr1.length; x<arr3.length-2; x=x+1) {
        int a=0;
        for (int y=0; y<arr2[a].length; y=y+1) {
            arr3[x][y] = arr2[a][y];
            a=a+1;
        }
    }
    return arr3;
}

但是我在行得到一个空指针异常 'arr3[i][j] = arr1[i][j];' 我能做些什么? 感谢您的帮助!

【问题讨论】:

  • 您的代码有什么不符合您的预期?您目前实际上并没有问问题。请告诉我们您对什么感到困惑。
  • 我忘了提到我遇到的异常,谢谢

标签: java arrays append


【解决方案1】:

您可以使用流
(尽管它们慢了几毫秒)

int[] array = IntStream.concat(
      IntStream.concat(IntStream.of( arr1[0] ), IntStream.of( arr1[1] )),
      IntStream.concat(IntStream.of( arr2[0] ), IntStream.of( arr2[1] )) )
          .flatMap(IntStream::of).toArray();

直接使用arr1arr2

Stream.of( arr1, arr2 ).flatMap(Stream::of).flatMapToInt(IntStream::of).toArray();


获取:[1, 2, 7, 9, 10, 3, 5, 7, 9, 16, 10, 11]

【讨论】:

    【解决方案2】:

    你有两个问题:

    1. 您没有定义每个arr3[i] 的长度
    2. 每次执行第二个 for 循环时,都会重置 a 变量。声明它需要超出第一个循环并递增它需要超出第二个循环(在第一个循环结束时)。

    把你的代码改成这样:

    public static int[][] append(int[][] arr1, int[][] arr2) {
      int [][] arr3 = new int [arr1.length + arr2.length][];
      for (int i = 0; i < arr1.length; i = i+1) {
        arr3[i] = new int[arr1[i].length];
        for (int j = 0; j < arr1[i].length; j = j+1) {
          arr3[i][j] = arr1[i][j];
        }
      }
    
      int a = 0;
      for (int x = arr1.length; x < arr3.length; x = x+1) {
        arr3[x] = new int[arr2[a].length];
        for (int y = 0; y < arr2[a].length; y = y+1) {
          arr3[x][y] = arr2[a][y];
        }
        a = a+1;
      }
      return arr3;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-05
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      相关资源
      最近更新 更多