2014-11-28 6 views
0

Хорошо, это должно быть просто. Но я был на этом в течение хорошего часа и не могу понять, почему его исключение nullpointer.Создание массива объектов из другого класса

Мне нужно создать массив для «Салли», а затем проверить его длину, которая должна быть равна 0. Это в основном методе класса драйвера.

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

, и это в классе объектов, который создал салли. что гнилой B.

private LendingItem[] signedOutItems; 

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

Я чувствую, что мне нужно, может объявить элемент кредитования, как

private LendingItem[] signedOutItems = {}; 

, но я все еще получаю ошибки с этим также.

EDIT:

Im собирается добавить еще так, что его более понятным, что мне нужно, чтобы произошло

Прилагается код ниже.

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; 
    } 

не нужно сходу кода только идея о том, как на самом деле сделать это.

+0

'частные signedOutItems = новый LendingItem [0];' Тада! – yts

+0

это позволит мне добавить несколько элементов в массив? –

+0

нет. Массив длины 0 неизменен и ничего нельзя добавить. – yts

ответ

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; 
    } 
} 

Это должно помочь вам начать работу ..

+0

СПАСИБО. это помогает кучу. в основном это было похоже на «вот как вы делаете массивы, теперь выполняйте это задание». –

+0

@NIcholasTremblay, пожалуйста, но это не похоже на то, что ваш учитель тоже хочет ... В любом случае, я отредактировал код, чтобы быть ближе к тому, что он может захотеть. – yts

+0

Это работает, его возвращает истинное утверждение, и я полностью понимаю это. Для всех интенсивных целей это полностью работает без использования списков массивов. вы @yts - джентльмен и ученый –

2

Этот

private LendingItem[] signedOutItems; 

эквивалентно

private LendingItem[] signedOutItems = null; 

поэтому, когда вы делаете,

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

Он возвращает null. Инициализируйте и добавьте элементы в массив. Нечто подобное,

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

создает массив с пространством для 10 LendingItem (ов). Обратите внимание, что каждый из этих 10 слотов инициализируется до null.

+0

Как примечание, массивы неудобны, особенно в виде полей. Списки намного удобнее. – maksimov

+0

@ maksimov Или реально, большинство экземпляров 'Collection' –

Смежные вопросы