Java 我试图反转二维数组,并不断得到一个空异常

Java 我试图反转二维数组,并不断得到一个空异常,java,function,methods,reverse,Java,Function,Methods,Reverse,下面是我的方法,假设它可以反转数组。 (另外,请记住,此方法可以接收锯齿阵列) Java结果:1 这是我调用该方法的主要代码 int[][] two = {{1,2,3,4},{0,1,2},{9},{1,3,5,7}}; System.out.println("The size of array os " + ar.length); System.out.println("The columns of array is " + ar[0].length); int[][] rev; //i

下面是我的方法,假设它可以反转数组。 (另外,请记住,此方法可以接收锯齿阵列)

Java结果:1

这是我调用该方法的主要代码

int[][] two = {{1,2,3,4},{0,1,2},{9},{1,3,5,7}};
System.out.println("The size of array os " + ar.length);
System.out.println("The columns of array is " + ar[0].length); 

int[][] rev;
//int[] b = concatenate(ar);
//int[] c = concatenate(two);
//int[][] rev = reverse(ar);

//for(int x=0;x<c.length;x++){System.out.println("worked" + c[x]);}

rev = reverse(two);

//for(int x = 0;x<rev.length;x++){
//  for(int y = 0;y<rev[x].length;y++){
//    System.out.print(rev[x][y]);
//}
//}
for(int x=0;x<rev.length;x++){
for(int y=0;y<rev[x].length;y++){
    System.out.print(rev[x][y]);
}
}

}// main
int[]two={1,2,3,4},{0,1,2},{9},{1,3,5,7};
System.out.println(“数组os的大小”+ar.length);
System.out.println(“数组的列为“+ar[0].length”);
int[][]修订版;
//int[]b=串联(ar);
//int[]c=串联(两个);
//int[]rev=反向(ar);

//对于(int x=0;x您的数组
rev
尚未在其第二个坐标中初始化。在声明
int[]]rev=new int[a.length][/code>后,所有
rev[i]
都是
null
对象(数组是对象,即使对于基本类型也是如此)。为避免这种情况,请使用
int[]]rev=new int[a.length][a[0]进行初始化.length]
或使用
rev[i]=new int[a[i].length]
左右,如果数组是锯齿状的。

您的数组
rev
尚未在其第二个坐标中初始化。声明
int[][]rev=new int[a.length][/code>后,所有
rev[i]
对象都是
null
对象(数组是对象,即使对于基本类型也是如此)。要避免这种情况,请使用
int[]]rev=new int[a.length][a[0].length]
rev[i]=new int[a[i].length]
进行初始化,如果数组是锯齿状的。

当您说这一行时

int[][] rev = new int[a.length][];
您已创建了数组的长度
a.length
数组,但内部数组都是
null
。因此,您将在此行中获得
null点ERException

rev[row-1][col-1]= a[x][y];
您需要在第一个for循环内创建内部数组。这将满足您的“锯齿数组”要求

for(int x=0;x<a.length;x++){
   int col = a[x].length-1;
   rev[row-1] = new int[a[x].length];  // Add this to create differing lengths.
   for(int y=0; y< a[x].length;y++){
当你说这行的时候,
for(intx=0;x)

int[][] rev = new int[a.length][];
您已经创建了一个长度为
a.length
的数组,但是内部数组都是
null
。因此,您在这一行得到了
NullPointerException

rev[row-1][col-1]= a[x][y];
您需要在第一个for循环内创建内部数组。这将满足您的“锯齿数组”要求

for(int x=0;x<a.length;x++){
   int col = a[x].length-1;
   rev[row-1] = new int[a[x].length];  // Add this to create differing lengths.
   for(int y=0; y< a[x].length;y++){

<代码> >(int x=0);因为它不适用于C++,所以XI移除了C++标记。你的代码看起来像是用右下角切换左上角,但是它应该用一个锯齿形数组来做什么?取int [][]两个{{1,2,3,4},{0},1,2},{ 9 },{1,3,5},席} },因此它可以是int [] [Rev={7,5,3,1},{ 9 },{2,1,0}。{4,3,2,1}}我移除了C++标签,因为它不适用于你。你的代码看起来是什么样子的,它的右下角是左上角,但是它应该是什么样的锯齿状数组?取INT[] [2={{1,2,2,4},{0},1,2},{ 9 },{1,3,5} }},所以它可以是int [] [Rev={7,5,3,1},{ 9 },{2,1,0},{4,3,2,1}}但是它会创建一个二维数组,每行有固定数量的列,不?@MaCo你是对的。在一般情况下正确的方法是
rev[i]=new int[a[x].length];
。会将此添加到答案中。谢谢。但这样会创建一个每行具有固定列数的二维数组,不是吗?@MaCo你说得对。在一般情况下正确的方法是
rev[i]=new int[a[x].length];
。会将此添加到答案中。谢谢。