如果我有一个二维数组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 }
答案 0 :(得分:3)
另请注意,您的2D阵列不需要是正方形;类型为int[][]
的变量意味着此变量是int[]
s。
所以我们说我们声明了一个变量int[][] array = new int[3][]
。然后,这意味着现在可以将类型为array[0]
的{{1}}分配给int[]
类型的任何其他值。
这是一个简短的示例程序:
int[]
输出:
1 1 2 1 2 3
答案 1 :(得分:1)
这没有任何意义,您将收到编译器错误警告您不兼容的类型。如果你只做arr [what]你应该只将它分配给一维数组,即
int[][] arr;
int[] otherArr;
arr[0] = otherArr;
- 编辑 -
您的代码应该可以正常工作。
output[x] = srcA[x];
output[x]
的类型为int[]
,因此srcA[x]
答案 2 :(得分:0)
您将收到不兼容的类型错误。分配给第一维时,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[]
类型的对象。所以一切都很好。
答案 3 :(得分:0)
小心srcB的长度。第6行尝试访问srcB [x],其中x可以达到srcA.length - 1;但是,您没有检查srcB是否足够长,因此这可能容易受到ArrayIndexOutOfBoundsExceptions的影响。还要记住,Java中的2D数组实际上是一维数组,其中每个元素本身都是一维数组。因此,这些元素可以具有不同的大小,并且您的2D阵列不需要是方形的。因此,您可能认为您保证了第3行中每个输出的大小,但您只保证宽度;高度可能会根据分配给每个位置的数组大小而有所不同。