1

これが、配列を逆にすることを想定した私の方法です。(また、このメソッドはジャグ配列を受け取る可能性があることに注意してください)

    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

だから私の質問は本当に、どこで間違ったのですか?私は自分の逆の方法をたどりました、そしてそれはその仕事をしているはずであるように見えますが、明らかにそうではありません。

4

2 に答える 2

3

配列revは2番目の座標で初期化されていません。宣言後int[][] rev = new int[a.length][]、すべてrev[i]nullオブジェクトになります(プリミティブ型の場合でも、配列はオブジェクトになります)。これを回避するには、配列がギザギザになっている場合は、 withint[][] rev = new int[a.length][a[0].length]またはwithなどで初期化します。rev[i] = new int[a[i].length]

于 2013-03-22T21:51:49.013 に答える
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++){
于 2013-03-22T21:53:47.987 に答える