2017-12-14 1 views
0

add 메서드를 사용하여 LinkedList를 구현하려고합니다. 보시다시피, 나는 LinkedList 클래스를 만들고 String을 포함하는 ArrayListnodes 특성으로 초기화했습니다.Java에서 메소드 내부의 전역 변수에 액세스하는 방법은 무엇입니까?

add 함수는 단순히 값을 받아 nodes 끝에 추가해야합니다. 대신 NullPointerException이 발생합니다.

무엇이 여기에 있습니까?

public class LinkedList { 
    public static ArrayList<String> nodes; 

    public LinkedList() { 
    ArrayList<String> nodes = new ArrayList<String>(); 
    System.out.print(nodes); 
    } 

    public ArrayList<String> add(String value) { 
    nodes.add(value); 
    return nodes; 
    } 


    public static void main(String [] args) throws IOException 
    { 
    LinkedList list = new LinkedList(); 
    list.add("B"); 
    } 

} 
+1

내가 물어 봐도 변수 인스턴스를 초기화? 'nodes'는 클래스가 아니라 인스턴스의 일부입니다. 또한 이미 필드이기 때문에'nodes = new ArrayList ();'형식이 없어야합니다. – Li357

+1

'ArrayList nodes = new ArrayList (); 이것은 문제입니다. – vinS

+1

로컬 변수가 필드를 숨기고 있습니다. 컴파일러에서 이것에 대해 경고하지 않았습니까? –

답변

0

동일한 작업에 2 개의 변수가 있습니다. 정적 인 nodes 변수는 초기화되지 않으므로 NullPointerException이 발생합니다. 그리고 다른 로컬 nodes 변수는 초기화되지만 사용되지 않는 클래스 생성자 안에 있습니다.

은 당신의 문제를 해결하기 위해 다음 2 단계를 팔로우 OOP 방식으로 하나의 nodes 변수를 사용하려면 :

  1. public static ArrayList<String> nodes;에서 static을 제거 적절한 인스턴스 변수를 가지고. nodes = new ArrayList<String>();

  2. 변경 ArrayList<String> nodes = new ArrayList<String>();는`nodes` 정적 이유

관련 문제