这是我的方法,假设要反转数组。 (另外,请记住,此方法可以接收锯齿状数组)
public static int[][] reverse(int[][]a){
int[][] rev = new int[a.length][];
int row = a.length;
for(int x=0;x<a.length;x++){
int col = a[x].length-1;
for(int y=0; y< a[x].length;y++){
rev[row-1][col-1]= a[x][y];
col--;
}
row--;
}
return rev;
}// reverse method
我一直在
Exception in thread "main" java.lang.NullPointerException
at Home.reverse(Home.java:259)
at Home.main(Home.java:56)
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
所以我的问题是,我哪里出错了? 我追溯了我的反向方法,它看起来应该做它的工作,但显然不是。
答案 0 :(得分:3)
您的数组rev
尚未在其第二个坐标中初始化。声明int[][] rev = new int[a.length][]
之后,所有rev[i]
都是null
个对象(数组是对象,即使对于基本类型)。为避免这种情况,请使用int[][] rev = new int[a.length][a[0].length]
或rev[i] = new int[a[i].length]
进行初始化,如果数组是锯齿状的。
答案 1 :(得分:1)
当你说这一行时
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++){