0

I want to read lines of numbers from a file. The code is as follows but the IDE shows NullPointerException runtime exception. Not sure what I am doing wrong.

//reading the contents of the file into an array
public static void readAndStoreNumbers() {
    //initialising the new object
    arr = new int[15][];

    try {
        //create file reader
        File f = new File("E:\\Eclipse Projects\\triangle.txt");
        BufferedReader br = new BufferedReader(new FileReader(f));

        //read from file
        String nums;
        int index = 0;
        while ((nums = br.readLine()) != null) {
            String[] numbers = nums.split(" ");

            //store the numbers into 'arr' after converting into integers
            for (int i = 0; i < arr[index].length; i++) {
                arr[index][i] = Integer.parseInt(numbers[i]);
            }
            index++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
4

5 に答える 5

5

の 2 番目の次元arrが初期化されておらず、呼び出しています

arr[index].length
于 2012-06-26T04:55:09.337 に答える
1

2つの理由でNPEXに遭遇する可能性があります。

  1. あなたはあなたの定義を終わらせません-あなたが;としてarr宣言することはあなたのコードで明白ではありません。arrint arr[][]

  2. 上記があったとしても、2番目のアレイ用のスペースを確保することはできません。あなたが今持っているのはジャグ配列です; 2番目の配列には、2番目の次元に任意の長さの要素を含めることができます。

    コードを機能させるためにコードに加えた唯一の変更は、次の行です。

    arr[index] = new int[numbers.length];
    

    ...要素をにプルした後numbers、ループに入る前。

于 2012-06-26T05:08:17.537 に答える
0

変更する必要があります-

for(int i=0; i<arr[index].length; i++) {

arr[index] = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {
于 2012-06-26T05:06:30.913 に答える
0

Java には実際の多次元配列はありません。使用しているのは、実際には int 配列の配列です。実際には、 type のオブジェクトnew int[n][]用のスペースを持つ配列を作成します。nint[]

したがって、これらのint配列をそれぞれ個別に初期化する必要があります。これは、プログラムのどこにも 2 番目の次元の長さを実際に指定していないという事実から明らかです。

于 2012-06-26T05:13:00.420 に答える
0

私はあなたが使うべきだと思うStringBuilder..

//reading the contents of the file into an array
public static void readAndStoreNumbers() {
    //initialising the StringBuffer 
    StringBuilder sb = new StringBuilder();

    try {
        //create file reader
        File f = new File("E:\\Eclipse Projects\\triangle.txt");
        BufferedReader br = new BufferedReader(new FileReader(f));

        //read from file
        String nums;
        int index = 0;
        while ((nums = br.readLine()) != null) {
            String[] numbers = nums.split(" ");

            //store the numbers into 'arr' after converting into integers
            for (int i = 0; i < arr[index].length; i++) {
                sb.append(Integer.parseInt(numbers[i])).append("\n");
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
于 2012-06-26T04:57:18.070 に答える