0

なぜnull例外ポインタエラーがスローされ、どうすればこの問題を解決できますか?あなたは何をすべきか説明することができます。私はtxtファイルの各行をarraylistに格納しようとしています。arraylistは別の配列の大きな配列リストに入ります。このためなぜこのコードはここにnull例外エラーを与えていますか?

public static ArrayList<ArrayList<String>> addAfter(String file1)throws IOException{ 
    Scanner scanner = new Scanner(new File(file1)); 
    ArrayList<ArrayList<String>> arr = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> a = null; 
    boolean check = false; 
    while(scanner.hasNextLine()) 
    { 
     String str = scanner.nextLine(); 
     String[] stringArr = str.split(" +"); 
     for(int i=0; i<stringArr.length; i++){ 
      a.add(stringArr[i]); //null exception being thrown here 
     } 
     stringArr = null; 
     arr.add(a); 
     a.clear(); 
    } 
    return arr; 
    } 
+0

例外はいつスローされますか?正確なエラーメッセージは何ですか?お読みください:https://stackoverflow.com/help/mcve –

答えて

1

ArrayList<String> a = null; 

のArrayListを宣言されましたが、初期化されませんでした。したがって、forループ内のArrayListにアクセスすると、基本的にnullを参照する変数aにアクセスしています。代わりに

は、実行します。また

ArrayList<String> a = new ArrayList<String>(); 

、あなたのコード内の別の問題を抱えている: あなたがループ内で同じオブジェクトの参照を渡しているのArrayListのArrayListのを作成したい(新しいのArrayListを作成しませんループの終わりでそれをクリアします)。これにより、同じArrayListがArrayList<ArrayList<>>のすべてのインデックスに追加されます。 arrayListに挿入する新しい行ごとにnew ArrayList<String>()を実行する必要があります。

は同じことをするようにコードを変更:

Javaでは
public static ArrayList<ArrayList<String>> addAfter(String file1)throws IOException{ 
Scanner scanner = new Scanner(new File(file1)); 
ArrayList<ArrayList<String>> arr = new ArrayList<ArrayList<String>>(); 
ArrayList<String> a = null; 
boolean check = false; 
while(scanner.hasNextLine()) 
{ 
    a = new ArrayList<String>(); // add this 
    String str = scanner.nextLine(); 
    String[] stringArr = str.split(" +"); 
    for(int i=0; i<stringArr.length; i++){ 
     a.add(stringArr[i]); //null exception being thrown here 
    } 
    stringArr = null; 
    arr.add(a); 
    //a.clear(); -- remove this line 
} 
return arr; 

、あなたは参照と(オブジェクトの場合)ではない値を渡します。

1

"a" ArrayListオブジェクトを初期化しませんでした。

ArrayList<String> a = new ArrayList<>(); 

代わりに、Javaでは

ArrayList<String> a = null; 

の、オブジェクト変数は、オブジェクトそのものではなく、オブジェクトが実際にメモリ上に配置されている場所への参照が含まれていません。 NullPointerExceptionが発生すると、オブジェクト変数がオブジェクトへの参照ではなくヌルであるため、Javaがオブジェクトにアクセスできなくなります。

1

これを使用してください。

ArrayList<String> a = new ArrayList<>(); 
関連する問題