2016-02-05 4 views
0

Это для домашней работы, и я становлюсь немного расстроенным тем, как я не могу понять что-то настолько простое.Java - как вызвать метод add() в другом классе

Для упрощения моего кода у меня есть 3 файла прямо сейчас: один класс с методом add(), который я создал между прочим, один файл, который его тестирует (сделанный проф), и тот, который создает объект (который Я не буду публиковать, b/c его работа). Вот функция add().

EDIT 2: Я собираюсь добавить метод, который печатает массив, может быть, это проблема?

public class Population { 
     private Person[] pop = new Person[15]; 
     private int numPop = 0;  

     public void add(Person c){ // this object is created in another class, it works fine 
     for(int i = 0; i < pop.length; i++){ 
      if(pop[i] == null) { 
      pop[i] = c; 
      numPop++; 
      } else {} 
     } 

public String listPeople(){ 
     System.out.println("Population with "+numPeople+" people as follows:"); 
     int i = 0; 
     while (i<numPeople){ 
     System.out.println("A "+pop[i].getAge()+"year old person named "+pop[i].getName()); 
     i++; 
//FYI the get methods are working fine and are in another file. 
} 
     return(""); 
     } 

Затем я запускаю программу в тестовом файле, чтобы обеспечить ее работу, которая была предоставлена ​​нам. Вот та часть, которая не работает

public class PopTestProgram{ // FYI the prof created this, I can't change this 
    public static void main(String[] args){ 

    Population pop = new Population(15); 

    pop.add(new Person(4, "Bob")); 
    pop.add(new Person(25, "Kim")); 
    // then adds 8 more people with different ages and names 
    // then prints the people 

Она компилирует, но когда я запускаю его, он просто ставит 10 последний человек в массив, то происшествия говоря, что проблема с "pop[i] = c;" линии. Я просто не могу понять, что мне нужно изменить здесь.

Я не получил письмо от профессора напрямую, поэтому я подумал, что попрошу здесь.

Редактировать: Вот что он показывает после распечатки последнего человека 10 раз. Он показывает проблемы с другими методами, которые я еще не завершены до сих пор, хотя ...

java.lang.ArrayIndexOutOfBoundsException: -1 
    at Population.removePerson(Population.java:49) 
    at PopTestProgram.main(PopTestProgram.java:31) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 
+0

Какое конкретное исключение вы получаете? – kichik

+0

Да, покажи всю штуку! –

+0

Это похоже на ошибку с тем, что передается от «нового человека» (4, «Боб»)); линия. Не могли бы вы показать метод или, по крайней мере, показать, что значение «c» находится во время ошибки? – Spencer4134

ответ

1

В оном (Person), вы не останавливая при добавлении элемента, так что вы добавили первый элемент помещается в все ячейки в массиве, то остальные не войдут вообще, поскольку в массиве больше нет нулевых ячеек. Разрыв цикла, когда вы найдете пустое место.

public void add(Person c) { 
    for(int i = 0; i < pop.length; i++){ 
     if(pop[i] == null) { 
     pop[i] = c; 
     numPop++; 
     break; 
     } 
     else { 
     //..... 
     } 
    } 
} 

Может просто использовать numPop в следующем месте в списке, как:

public void add(Person c) { 
    if (numPop < pop.length) { 
     pop[numPop++] = c; 
    } 
} 
+0

Это не сработало :(Он печатает то же самое. Я добавлю метод, который печатает массив , возможно, проблема там. –

+0

Проблема заключается в removePerson. Пожалуйста, включите этот метод. – DBug

0

Исключение поступающими на Population.removePerson(Population.java:49), которая не связана добавить метод. Поэтому я предполагаю, что removePerson - это метод печати человека. При удалении вы вызываете один дополнительный За цикл, убедитесь, что ваша итерация равна раз.

java.lang.ArrayIndexOutOfBoundsException: -1 четко рассказывает метод removePerson называет индекс -1 также (который оленья кожа существуют вызывая ArrayIndexOufofBoundsException). Метод removePerson должен начинаться с индекса 9 до индекса 0 (или наоборот) [всего 10 итераций], а затем останавливаться.

Надеюсь, что это поможет

+0

К сожалению, это не ошибка. Этот метод еще не целиком, вы правы, но ошибки, которые я пытаюсь исправить происходят раньше, чем удаляется функция removePerson(). Вот почему я упомянул, что исключения не будут полезны :) –

+0

Исключительная трассировка говорит так: на Population.removePerson (Population.java:49). Что такое код в строке 49 в Population.java –

+0

Да, я знаю, что там есть ошибка. но он работает после add() и listPeople(), поэтому он абсолютно не имеет отношения к текущей проблеме. Я мог бы удалить removePerson(), и у меня была бы такая же проблема. Это то, что я имел в виду. –

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