从另一个类创建Object数组

时间:2014-11-28 00:43:26

标签: java arrays object nullpointerexception

好的,这应该很简单。但是我已经在这个好时光了,并且无法弄清楚为什么它是一个nullpointerexception。

我需要为" Sally"创建一个数组。然后测试它的长度,该长度应为0.这是驱动程序类的主要方法。

 LendingItem[] sallysItemList = sally.getSignedOutItems();
if (sallysItemList.length == 0)

这是在创建sally的对象类中。腐烂的B.

    private LendingItem[] signedOutItems;

public LendingItem[] getSignedOutItems() {
    return signedOutItems;
}

我觉得我需要将Lending项目声明为

private LendingItem[] signedOutItems = {};

但我仍然会遇到错误。

编辑:

我要添加更多,以便更容易理解我需要做什么

提供以下代码。

   System.out.println("\n*** Test case #1: Create a CardHolder object & test accessors");
CardHolder sally = new CardHolder("Sally Smith",
                                  152,
                                  "454-1234");
System.out.println("Name:     " + sally.getName()
               + "\nAppt #:   " + sally.getAptNumber()
               + "\nPhone:    " + sally.getPhoneNumber()
               + "\nMember #: " + sally.getMembershipNumber());

LendingItem[] sallysItemList = sally.getSignedOutItems();
if (sallysItemList.length == 0)
  System.out.println("Correct result: Sally has zero lending items.");
else
  System.out.println(">> ERROR: Sally has more than zero lending items.");


 System.out.println("\n*** Test case #6: Sign out one LendingItem");

if(sally.signOut(testItemList[0]))
{ System.out.println("Correct result: Sally signed out an item successfully.");
  sallysItemList = sally.getSignedOutItems();
  if (sallysItemList.length == 1)
    System.out.println("Correct result: Sally has one lending item.");
  else
    System.out.println(">> ERROR: Sally has other than one lending item.");
}
else
  System.out.println(">> ERROR: Sally was unable to sign out an item.");

到目前为止,这是我的代码。 只需要退回当前退出的项目。

    public LendingItem[] getSignedOutItems() {
    return signedOutItems;
}

这是我们期望添加到数组的方式,它需要返回一个布尔值

    public boolean signOut(LendingItem lendingItem) {
    if (signedOutItems.length < 7) {
        signedOutItems[0] = lendingItem;
        return true;
    } else {
        return false;
    }

不需要直接的代码只是想知道如何实现这一目标。

2 个答案:

答案 0 :(得分:2)

private LendingItem[] signedOutItems;

相当于

private LendingItem[] signedOutItems = null;

所以当你这样做时,

public LendingItem[] getSignedOutItems() {
    return signedOutItems;
}

返回null。初始化并向元素添加元素。像,

private LendingItem[] signedOutItems = new LendingItem[10];

创建一个包含10 LendingItem(s)空间的数组。请注意,这10个插槽中的每个插槽都初始化为null

答案 1 :(得分:0)

这是制作一个使用数组维护列表的疯狂类的一种方法,能够返回不同大小的数组。

public class CardHolder {
    private LendingItem[] lendingItems;

    public CardHolder () {
        lendingItems = new LendingItem[0];
    }

    public boolean signOut(LendingItem item) {
        if (lendingItems.length >= 7) return false;
        lendingItems = Arrays.copyOf(lendingItems, lendingItems.length + 1); //copies old array, but adding a null value to the new one
        lendingItems[lendingItems.length - 1] = item; //replace the null value with the new item to add
        return true;
    }

    public LendingItem[] getSignedOutItems() {
        return lendingItems;
    }
}

这应该有助于你开始..