2016-02-28 40 views
-2

所以我要帶AP計算機科學,我需要一些幫助我在活動28,我有這樣的疑問:變量指數可能沒有初始化的問題

的removeExtension方法的目的是輸入一個名稱或3位數的分機號碼(以字符串的形式呈現),並從extensions數組中移除它找到的第一個與名稱或分機(或兩者)匹配的條目。如果發生這種刪除,則擴展數組的大小減1。

與活動27.1中一樣,比較名稱時應該註冊匹配項,如果唯一區別是使用大寫或小寫字母。所以「彼得」和「彼得」應該匹配,而「彼得」和「彼得」不應該。

完成removeExtension方法的定義:

public class MainClass{ 
    public static PhoneExtension[] extensions = new PhoneExtension[]{ 
     new PhoneExtension("Christine", "763"), 
     new PhoneExtension("Janice", "464"), 
     new PhoneExtension("Jon", "564"), 
     new PhoneExtension("Peter", "760"), 
     new PhoneExtension("Nicholas", "564"), 
     new PhoneExtension("Michael", "465"), 
     new PhoneExtension("Ryan", "564"), 
     new PhoneExtension("Pamela", "467"), 
     new PhoneExtension("Janice", "999"), 
     new PhoneExtension("Christine", "763") 
    }; 
    public static void printDirectory(){ 
     for (PhoneExtension ext : extensions) 
      System.out.println(ext); 
    } 
    public static void removeExtension(String t){ 
     //My code starts here. 
     PhoneExtension[] temp = new PhoneExtension[extensions.length - 1]; 
     int index; 
     for (int i = 0; i < extensions.length - 1; i++){ 
      if (t.toLowerCase().equals(extensions[i].getName().toLowerCase()) || t.equals(extensions[i].getExtension())){ 
       index = i; 
       continue; 
      } 
     } 
     for (int i = 0; i < index; i++){ 
      temp[i] = extensions[i]; 
      } 
     for (int i = index; i < temp.length - 1; i++){ 
      temp[i + 1] = extensions[i]; 
     } 
     extensions = temp; 
     //And ends here. 
    } 
    public static void main(String[] args){ 
     removeExtension("Peter"); 
     printDirectory(); 
    } 
} 

這將引發此錯誤:

MainClass.java:75: error: variable index might not have been initialized 
for (int i = 0; i < index; i++){ 
        ^

有幾件事情需要注意的是:在PhoneExtension類沒有顯示,但它具有的getName和返回它的名字或擴展名的getExtension方法。它的構造方法如下所示:PhoneExtension(String name,String extension)。我不知道爲什麼我們不使用ArrayLists,似乎可以節省一些麻煩,但我可能會錯過一些讓我們無法使用它們的東西...

+0

如果第一個循環中的if語句失敗index語句不會被初始化,編譯器會看到併發出錯誤 – Ramanlfc

+0

錯誤消息告訴你到底發生了什麼錯誤 - 所以初始化變量。這個問題的關鍵是仔細閱讀所有的錯誤信息,並試圖弄清楚他們告訴你什麼。如果您遇到困難,請在此網站上搜索錯誤消息,因爲很可能以前有人問過這類問題。 –

+0

@HovercraftFullOfEels是的我看到錯誤,變量應該在for循環中初始化... – GusN

回答

0

您需要初始化本地變量index 。如果i < extensions.length - 1從未如此,那麼index將不會被初始化,這就是編譯器抱怨的原因。

這樣做:int index = 0

+0

我是0,extensions.length - 1是9,問題不應該在那裏。如果我初始化索引爲0它只是刪除第一個PhoneExtension,而不是正確的。 – GusN

+0

好吧,即使你認爲'extensions.length -1'是9,編譯器會確保在最壞的情況下,如果不滿足條件,並且從未設置'index',那麼你不能在沒有初始化的情況下訪問它。只需用'int index = 0;替換int index;'。 //或者你想要的任何東西,並且看看你的自我。 – Atri

+0

if語句是有效的,事實證明索引沒有被初始化,就像你在第二個評論中說的那樣,我記得在int index = 0之前嘗試了它;但我想我也改變了一些其他的東西。 – GusN