0

ファイルを読み取ってから、その内容を配列に配置するのに問題があります。コンソールは、私のエラーがここにあると言います:

Exception in thread "main" java.lang.NullPointerException
at readFile.readFile(readFile.java:23)
at apples.main(apples.java:6)

しかし、私は今それを修正する方法はありません。

import java.util.*;
import java.lang.*;
import java.io.*;


public class readFile {
private Scanner x;

public void openfile(){
    try{
        x = new Scanner( new File("/Users/Zachary/Desktop/chinese.txt"));

    }
    catch (IOException e){
        System.out.println("you failed foo");
    }
}
    public void readFile(){
        int y = 0;
        int[] nums = null;
        while(x.hasNext()){
            for(y=0; y<10;y++) {
                nums[y] = x.nextInt();
            }
            System.out.println(nums[y]);
        }
    }
    public void closeFile(){
        x.close();
    }
}



public class apples {
public static void main (String[]args){
    readFile r = new readFile();
    r.openfile();
    r.readFile();
    r.closeFile();

}
}
4

3 に答える 3

2

あなたはNullPointerExceptionat を持っているようです:

nums[y] = x.nextInt();

これは、次の行が原因です。

int[] nums = null;

これは null であるため、その中に何かを入れることはできません。簡単な修正は次のとおりです。

int[] nums = new int[10];

上記のコードは、次のnumsように空の (実際には 0 で埋められている) 配列になるように初期化します。

---------------------
|0|0|0|0|0|0|0|0|0|0|
---------------------

好きなだけ数字を追加できるようにしたい場合は、ArrayList(リンク)が必要です。

また、このコードはエラーをスローします。

for(y=0; y<10;y++) {
    nums[y] = x.nextInt();
}
System.out.println(nums[y]);

それはあなたSystem.out.printlnが何であるかを知らないからyです。をループに移動しSystem.out.printlnて、for「見る」ことができるようにしますy。(これをスコープと呼びます)

于 2013-01-25T02:14:22.517 に答える
0

内側のループは本当に必要ですか? x * 10 回ループしていますが、これは割り当てられたデータに対して実際には良い方法ではありません。

于 2013-01-25T02:20:08.020 に答える
0

コンパイラ エラーは、「readFile.java:23」でエラーが発生したことを示しています。これは、ファイル readFile.java の 23 行目です。私はそれがこの行だと信じています:

nums[y] = x.nextInt();

問題は、次のように宣言numsしたことです。

int[] nums = null;

に初期化された配列にアクセスしようとするとnullNullPointerException.

この問題を解決するには、配列オブジェクトを作成する必要があります。

int[] nums = new int[SOME_SIZE];

私が値を推測するのに十分な情報を提供していないため、サイズを自分で提供する必要があります。

于 2013-01-25T02:17:01.103 に答える