Java 2D阵列问题

时间:2010-10-23 17:17:26

标签: java arrays

如果我有一个二维数组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 }

4 个答案:

答案 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行中每个输出的大小,但您只保证宽度;高度可能会根据分配给每个位置的数组大小而有所不同。