[英]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.