2014-12-06 5 views
0

final 인 클래스를 작성 중입니다. 그것은 미디어 라이브러리 (media library)가되어 새로운 미디어 아이템을 가지고 배열에 저장하고 메시지가 나타나면 그것을 표시 할 예정인 다른 미디어들 (DVD, 게임 등)에 관한 정보를 저장합니다. 그것들 모두를 수행하지만 표시 할 때 그것이 의도 한대로 실행 중이지만 getter에 NullPointerException이 있습니다.getter에서 NullPointerException이 발생했습니다.

public class MediaItem { 
private String title; 
private String format; 
private boolean onLoan; 
private String loanedTo; 
private String dateLoaned; 

public MediaItem(){ 
    title = null; 
    format = null; 
    onLoan = false; 
    loanedTo = null; 
    dateLoaned = null; 

} 

public MediaItem(String title, String format){ 
    this.title = title; 
    this.format = format; 
    onLoan = false; 

} 

위에서 우리는 그 다음

전화를 들었다로 "MediaItems"를 만드는 클래스의 필드와 생성자 있으며, 다른 클래스의 부분, 즉, 라이브러리 자체입니다. 미디어 항목을 저장하기위한 하나의 배열과 목록을 인쇄하기위한 배열. 또한 add 메서드와 배열에 추가하는 방법.

private MediaItem[] items = new MediaItem[100]; 
private String[] listOfItems = new String[100]; 
private int numberOfItems = 0; 

public void addNewItem(String title, String format){ 
    MediaItem item = new MediaItem(title, format); 
    items[numberOfItems] = item; 
    numberOfItems++; 
} 

그리고 여기이가 아닌

public void listAllItems(){ 
    for (int i = 0; i < items.length; i++){ 
     System.out.println(items[i].getTitle()); 
    } 
    } 

와 나는 문제가 발생하고있는 부분이 무엇인지는 어떻게해야하지만, 내 현재의 문제는이 항목의 전체 목록을 인쇄 않는다는 것입니다 만 또한 NullPointerException을 제공하고 이유를 모른다. 호출되는 게터는 기본 일식이 내가 거친 그래서 너무 부드러운 바랍니다 새로 온 자바입니다 게터에게

public String getTitle() { 
    return title; 
    } 

을 생성합니다. 나는 그것이 모든 관련 부분이므로 모든 도움을 주시면 감사하겠습니다!

+2

'items [i]'는 특정 값 'i'에 대해 확실히 null입니다. 'addNewItem'을 100 회 호출하지 않으면,이 코드 라인을 가진 NPE가 항상있을 것입니다. –

답변

1

items.length은 항상 전체 배열 (귀하의 경우에는 100)의 길이가되며, 실제로 얼마나 많은 항목이 추가되었는지 나타냅니다. 이런 식으로 시도 :

public void listAllItems(){ 
    for (int i = 0; i < numberOfItems; i++){ 
    System.out.println(items[i].getTitle()); 
    } 
} 

귀하의 경우 문제는 게터 자체하지만 nullgetTitle() 메소드를 호출하려고하지 않습니다.

+0

고마워요. 내가 눈치 채지 못했다고 믿을 수는 없다. 그런 식으로 시도해 보았다. 맹세 할 수있다. 위의 방법은 정확히 같지만 신선한 눈으로는 세상의 차이를 만들 수있다. 다시 감사합니다. –

0

100 개 장소가 예약되어 있지만 모든 장소가 점유 된 것은 아닙니다. 이로 인해 이러한 요소의 속성에 액세스 할 때 NullPointerException이 발생합니다.

당신은 배열에서 null이 아닌 모든 요소를 ​​얻을 방법을 아래에 사용할 수

: 그냥 널 (null) 검사와 함께 'for'루프

public void listAllItems(){ 
    int i = 0; 
    while (i < numberOfItems){ 
    if (items[i] != null) // Null check 
     System.out.println(items[i].getTitle()); 
    i+=1; 
    } 
} 

을 또는이를 이용한도 충분합니다 :

public void listAllItems(){ 
    for (int i = 0; i < numberOfItems; i++) { 
    if (items[i] != null) 
     System.out.println(items[i].getTitle()); 
    }  
} 
관련 문제