0

次のコードがあります。Matrix クラスのコンストラクタです。メインスレッドはコンストラクターを呼び出すだけで、マトリックスを出力します (そのためのメソッドを作成しました)。

public class Matrix{ 
    float [][] mainMatrix; 
    int rows; 
    int columns; 
    public Matrix(){
        System.out.printf("\nInput the number of rows \n") ;
    String rowR = new Scanner(System.in).next().replace(" ", "").replace("\n", "").toString();
    rows = Integer.parseInt(rowR);
    System.out.printf("\n Input the number of columns \n");
    String columnR = new Scanner(System.in).next().replace(" ", "").replace("\n", "").toString();
    columns = Integer.parseInt(columnR);
    System.out.printf("Input the rows, seperated by a \" \". Close the row with a \"]\"");
    System.out.println("Warning!!! Inproper input will cause the program to crash!"); 
    for(int r = 0; r < rows; r++){
        Scanner item = new Scanner(System.in);
        System.out.printf("\n["); 
        String[] raw = item.next().replace("]", "").replace("\n", "").split(" ");
        for(int c = 0; c < columns; c++){
            mainMatrix[r][c] = Float.parseFloat(raw[c]);  
        }
    }
    /*Bunch of methods*/ 
} 

何らかの理由で、コードが実行されると、NullPointerException が返され、次の行を指します。

mainMatrix[r][c] = Float.parseFloat(raw[c]);

それが役立つ場合、出力は次のようになります。

 Input the number of columns 
2

Input the rows, seperated by a " ". Close the row with a "]"Warning!!! Inproper input will cause the program to crash!

[ 2 3] /*\n*/ 
[Ljava.lang.String;@29173efException in thread "main" java.lang.NullPointerException
    at mathProgs.linProg.Matrix.<init>(Matrix.java:51)
    at mathProgs.linProg.MatrixTest.main(MatrixTest.java:10)

2、3、および ] はユーザー入力です。"]" の後に Enter キーを押します。

4

2 に答える 2

5

理由は、初期化していないためですmainMatrix。次のようなものが必要です:

mainMatrix = new int[rows][columns];

それ以外の場合、変数のデフォルト値はであるため、逆参照 (配列の要素nullに値を代入) しようとすると、 .NullPointerException

他のいくつかの言語とは異なり、配列オブジェクトを作成すると、サイズが固定されることに注意してください。後で項目を追加することはできません。Listそのためには、などの実装が必要ですArrayList。この場合、最初から行と列の数を知っているので問題ありませんが、覚えておく価値があります。

于 2013-03-05T03:50:20.957 に答える
2

属性を初期化していないmainMatrixため、デフォルト値はnull使用時に NPE を取得します。行変数と列変数があるときに初期化します。

mainMatrix = new float[rows][columns];
于 2013-03-05T03:50:10.830 に答える