Java 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

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

编译错误,就是这样。编译错误,就是这样。您能详细介绍一下您的编辑吗。我不太明白,你能详细说明一下你的编辑吗。我不太明白发生了什么事