我正在上课。它应该是一个“媒体库”,用于存储有关人物媒体(DVD,游戏等)的信息,以及它应该在新媒体项中采用的其他内容,将它们存储到数组中并在提示时显示它们。它完成了所有这些但是当它显示时它在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,我不知道为什么。被调用的getter是一个基本的eclipse生成的getter
public String getTitle() {
return title;
}
这是一个Java I粗,所以我是新的所以请温柔。我相信这是所有相关部分,所以任何帮助都表示赞赏!
答案 0 :(得分:1)
items.length
将始终是整个数组的长度(在您的情况下为100),无论您实际添加了多少项。试试这样:
public void listAllItems(){
for (int i = 0; i < numberOfItems; i++){
System.out.println(items[i].getTitle());
}
}
您的案例中的问题不是getter本身,而是尝试在getTitle()
上调用null
方法。
答案 1 :(得分:0)
你确实有100个位置,但我怀疑并非所有的地方都被占用了。当访问这些元素的属性时,这会导致NullPointerException。
您可以使用以下方法从数组中获取所有非null元素:
public void listAllItems(){
int i = 0;
while (i < numberOfItems){
if (items[i] != null) // Null check
System.out.println(items[i].getTitle());
i+=1;
}
}
或者只使用null检查使用相同的'for'循环也应该足够了:
public void listAllItems(){
for (int i = 0; i < numberOfItems; i++) {
if (items[i] != null)
System.out.println(items[i].getTitle());
}
}