2013-05-21 5 views
0
public class Tabel { 
    private static int dimension; 

    private ArrayList<ArrayList<Character>> tabel; 


    public Tabel(int dimension) { 

     Tabel.dimension = dimension; 

     for (int i=0;i<Tabel.dimension*Tabel.dimension;i++) { 
      tabel.add(new ArrayList<Character>()); 
     } 

    } 
} 

의 ArrayList에에 ArrayList에 추가에 문제가.은 ArrayLists

private static int는 디버그의 "variables"섹션에 표시되지 않습니다.

나는 tabel.add(...)NullPointerException 얻을하지만 난 디버그를 볼 때, 내가 대신 폐쇄에 점프의이 함수의 점프 중괄호 "다음"공격 때문에 테이블에 아무것도 추가하지 않습니다, 한 번 for를 입력 .

내가이 .add에 댓글을 달면 문제가 해결됩니다 (제 생각 엔). 내 구문이 잘못 되었습니까? 또는 더 많은 코드를 게시해야합니까?

+4

참고 사항 : 생성자에 의해 초기화되는'static' 변수를 갖는 것은 재앙을위한 처방처럼 보입니다. – Keppil

+0

@Keppil 이것은 "얇은 버전"입니다. 한 번만 발생하는 부울이 있습니다. 가장 좋은 방법은 아니지만 다른 아이디어는 없습니다. – Kalec

답변

5

tabel은 초기화되지 않았으므로 null입니다.

변경

private ArrayList<ArrayList<Character>> tabel; 

private ArrayList<ArrayList<Character>> tabel = new ArrayList<ArrayList<Character>>(); 

또는 더 나은

에 :

private List<ArrayList<Character>> tabel = new ArrayList<ArrayList<Character>>(); 

ArrayListtabel 넥타이를하지 않기 때문에.

1

private 목록을 초기화하지 않았습니다. 다음을 수행하십시오.

0

중첩 수준에 대해서도 이해할 수 있습니다.

ArrayList보다는 List를 참조하는 것이 좋습니다. 구체적인 클래스에 메서드가 필요하지 않으면 프로그램에서 인터페이스와 인터페이스의 메서드를 참조하는 데 더 유연 해집니다.

문자 목록으로 정의 된 필드가있는 클래스 (1)을 만듭니다. 생성자에서 필드를 새 ArrayList로 설정합니다.

클래스 (1)의 목록으로 정의 된 필드가있는 다른 클래스 (2)를 만듭니다. 생성자에서 필드를 새 ArrayList로 설정합니다.

클래스 (2)의 목록으로 정의 된 필드가있는 다른 클래스 (3)을 만듭니다. 생성자에서 필드를 새 ArrayList로 설정합니다.

당신이하고있는 것을 이해 했으므로이 3 개의 클래스에보다 의미있는 이름을 지정할 수 있습니다.