0

왜 null 예외 포인터 오류가 발생하고 어떻게 고칠 수 고맙습니다. 당신이 무엇을해야하는지 설명 할 수 있다면. txt 파일의 각 줄을 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를을 생성하지 루프를 종료하고 for 루프의 끝에서이를 지운다. 이로 인해 ArrayList<ArrayList<>>의 모든 인덱스에 동일한 ArrayList가 추가됩니다. arrayList에 삽입하려는 모든 새로운 행에 대해 new ArrayList<String>()을 수행해야합니다.

동일한 기능을 수행 할 코드를 수정 :

자바에서
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 = null; 

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

, 변수는 객체 자체하지만, 객체가 실제로 메모리의 위치에 대한 참조를 포함하지 않는 객체. NullPointerException을 받으면 객체 변수가 객체에 대한 참조가 아닌 null이기 때문에 Java가 객체에 액세스 할 수 없음을 의미합니다.

1

사용하십시오.

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