Java 2D数组问题
如果我有一个2D数组,Java 2D数组问题,java,arrays,Java,Arrays,如果我有一个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
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 }
publicstaticint[][]神秘(int[][]srcA,int[]srcB){
2 int width=srcA.length,height=srcA[0]。length;
3 int[][]输出=新int[宽度][高度];
4表示(int x=0;x
这毫无意义,您将收到一个编译器错误,警告您不兼容的类型。如果你只做arr[whatever],你应该只把它分配给一个一维数组,即
int[][] arr;
int[] otherArr;
arr[0] = otherArr;
--编辑--
您的代码应该可以正常工作
output[x] = srcA[x];
output[x]
的类型是int[]
,而srcA[x]
的类型也是如此,没有任何意义,您将收到编译器错误警告,指出不兼容的类型。如果你只做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
编辑:
行输出[x]=srcA[x]代码>编译得很好,因为如果查看srcA[x]
返回的是int[]
。当您指定给output[x]
时,它正在查找int[]
类型的对象。所以一切正常。您将得到一个不兼容的类型错误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
编辑:
行输出[x]=srcA[x]代码>编译得很好,因为如果查看srcA[x]
返回的是int[]
。当您指定给output[x]
时,它正在查找int[]
类型的对象。所以一切都很好。还要记住,2d阵列不需要是正方形;int[][]
类型的变量表示此变量是int[]
s的数组
假设我们声明了一个变量int[][]array=newint[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
1.
1 2
1 2 3
还要记住,2d阵列不需要是正方形的;int[][]
类型的变量表示此变量是int[]
s的数组
假设我们声明了一个变量int[][]array=newint[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
1.
1 2
1 2 3
注意srcB的长度。第6行尝试访问srcB[x],其中x可以达到srcA.length-1;但是,您没有检查srcB是否足够长,因此这可能容易受到ArrayIndexOutofBoundsException的攻击。还要记住,Java中的2D数组实际上是一个1D数组,其中每个元素本身就是一个1D数组。因此,这些元素可以具有不同的大小,并且您的二维阵列不必是方形的。因此,您可能认为您保证了第3行中每个输出的大小,但您只保证了宽度;高度可能因分配给每个位置的阵列大小而异。请注意srcB的长度。第6行尝试访问srcB[x],其中x可以达到srcA.length-1;但是,您没有检查srcB是否足够长,因此这可能容易受到ArrayIndexOutofBoundsException的攻击。还要记住,Java中的2D数组实际上是一个1D数组,其中每个元素本身就是一个1D数组。因此,这些元素可以具有不同的大小,并且您的二维阵列不必是方形的。因此,您可能认为您保证了第3行中每个输出的大小,但您只保证了宽度;根据分配给每个位置的数组的大小,高度可能会有所不同。编译错误,就是这样。编译错误,就是这样。您能详细介绍一下您的编辑吗。我不太明白,你能详细说明一下你的编辑吗。我不太明白发生了什么事