繁体   English   中英

Java 2D阵列问题

[英]Java 2D Arrays Question

如果我有一个2D数组arr[][] ,可以说我这样做: arr[0]=10; 这是做什么的? 我只在第一个维度上分配了10,但我没有提到第二个维度。 在这种情况下会发生什么?

编辑:好吧,这:

public static int[][] mystery(int[][] srcA, int[][] srcB) {

    2 int width= srcA.length, height = srcA[0].length;
    3 int[][] output = new int[width][height];
    4 for (int x = 0; x < width; x++) {
    5 if(x%2 ==0) output[x] = srcA[x];
    6 else output[x] = srcB[x];
    7 }
    8 return output;
    9 }

另外请记住,您的2d数组不必是正方形的; int[][]类型的变量表示此变量是int[]的数组。

因此,可以说我们声明了一个变量int[][] array = new int[3][] 然后,这意味着int[]类型的array[0]现在可以分配给int[]类型的任何其他值。

这是一个简短的示例程序:

public class Example {
  public static void main(String args[]){
      int[][] a = new int[3][];
      a[0] = new int[]{1};
      a[1] = new int[]{1,2};
      a[2] = new int[]{1,2,3};
      display(a);
  }

  private static void display(int[][] array){
      for(int[] row : array){
          for(int value : row){
              System.out.print(value + " ");
          }
          System.out.println();
      }
  }
}

输出:

1
1 2
1 2 3

那没有任何意义,您将收到一个编译器错误,警告您输入不兼容的类型。 如果只执行arr [whatever],则应仅将其分配给一维数组,即

int[][] arr;
int[] otherArr;
arr[0] = otherArr;

- 编辑 -

您的代码应该可以正常工作。

output[x] = srcA[x];

output[x]的类型为int[]srcA[x]的类型也是如此

您将收到不兼容的类型错误。 分配给第一维时, int[][]期望为int[]

class test{
    public static void main(String[] args){
            int[][] myarr = new int[10][10];
            myarr[10] = 0;
    }
}

j.java:4: incompatible types
found   : int
required: int[]
    myarr[10] = 0;}
                ^
1 error

编辑:行output[x] = srcA[x]; 编译就很好,因为如果您查看srcA[x]返回的内容,则它是一个int[] 当您分配给output[x]它正在寻找int[]类型的对象。 所以一切都很好。

请注意srcB的长度。 第6行尝试访问srcB [x],其中x可以达到srcA.length-1; 但是,您没有检查srcB是否足够长,因此这很容易受到ArrayIndexOutOfBoundsExceptions的攻击。 还请记住,Java中的2D数组实际上是1D数组,其中每个元素本身就是1D数组。 因此,这些元素的大小可以变化,并且您的2D数组不必是正方形的。 因此,您可能以为您保证了第3行中每个输出的大小,但是只保证了宽度; 高度可能会有所不同,具体取决于分配给每个位置的数组的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM