2016-02-05 43 views
0

這是用於作業,我對如何弄清楚如此簡單的事情感到有些沮喪。爲了簡化我的代碼,我現在有3個文件:一個類帶有一個add()方法,我創建了其他東西,一個測試它的文件(由prof創建)以及一個創建對象的文件我不會發布,B/C的工作)。這是add()函數。Java - 如何在另一個類中調用add()方法

編輯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

加(人),當你添加一個項目你不停止,所以你添加的第一個項目放在數組中的所有單元格,其餘的將不會進入,因爲數組中沒有更多的空單元格。當你找到一個空的位置時打破循環。

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是打印這個人的方法。 雖然刪除您呼叫一個額外的For循環,請確保您的迭代只有次。

java.lang.ArrayIndexOutOfBoundsException: -1清楚地講述了removePerson方法正在調用的索引-1也(其犯規存在引起ArrayIndexOufofBoundsException)。 removePerson方法應該從索引9開始到索引0(或反之)[總共10次迭代],然後停止。

希望這會有幫助

+0

不幸的是,這不是錯誤的地方,該方法還沒有完成,你是對的,但我試圖修復的錯誤在removePerson()甚至運行之前發生,這就是爲什麼我提到異常不會有幫助:) –

+0

異常跟蹤如此說明:在Population.removePerson(Population.java:49)。 Population.java中第49行的代碼是什麼 –

+0

是的,我知道那裏有錯誤。但它在add()和listPeople()之後運行,所以它與當前問題完全無關。我可以拿出removePerson()和我會有同樣的問題。我正是這個意思。 –

相關問題