2012-03-07 72 views
0

我可能錯過了一些非常簡單的事情,但我是新的,它只是更容易尋求幫助。這是作業,所以如果你想要的話你可以提供線索,但是請理解我對java很恐怖。在switch語句中沒有執行的代碼

以下是地址簿的一些代碼。我希望用戶輸入1來查看條目2以在書中放入另一個條目或者3放棄。 我得到了程序工作,但它沒有循環詢問用戶下一步該做什麼。然後,我編寫了一個switch語句,當用戶選擇1時,程序不會運行與case 1相關的代碼:並且與case 2相同。程序確實驗證了我的輸入(我在一個單獨的類中編寫了驗證器)

編碼時我錯過了什麼嗎?

再次我是新來的,所以不要打我。

import java.util.Scanner; 

    public class AddressBookEntryApp 
    { 

public static void main(String[] args) 
{ 

    //create new scanner 
    Scanner ip = new Scanner(System.in); 
    //welcome user to the address book application 
    System.out.println("Welcome to the Address Book Application"); 
    System.out.println(); 
    int choice = 0; 
    boolean quit = false; 
    do 
    { 

     //have the user enter a menu number 
     System.out.println("1 - List entires"); 
     System.out.println("2 - Add entry"); 
     System.out.println("3 - Exit"); 


     System.out.println(); 
     int menuNumber = Validator.getInt(ip, "Enter menu number: ", 1, 3); 
     System.out.println(); 
     switch (choice) 
     { 
     case 1: 

       AddressBookIO GetEntryObject = new AddressBookIO(); 
       GetEntryObject.getEntriesString(); 
       System.out.println(AddressBookIO.getEntriesString()); 
       break; 

     case 2: 


       String name = Validator.getEntry(ip, "Enter name: "); 
       String email = Validator.getEntry(ip, "Enter email address"); 
       String phone = Validator.getEntry(ip, "Enter phone number: "); 
       AddressBookEntry newEntry = new AddressBookEntry(name, email, phone); 
       AddressBookIO.saveEntry(newEntry); 
       break; 


     } 
}while (!quit); 

    } 
    } 

回答

0

您不會更改變量choice的值。因此,它在開始初始化時保持爲'0'。所以你的代碼永遠不會進入case語句。那就是問題所在 。請嘗試以下操作:

choice = Validator.getInt(ip, "Enter menu number: ", 1, 3); 
0

你有0(int choice = 0;)分配選擇,永遠不會改變,所以在開關不匹配既不是1也不是2

這也許應該是

switch (menuNumber) 
+0

這似乎工作!那麼我沒有必要聲明一個選擇呢?我一直在爲其他程序做這件事,所以這其中的一些情況已經沒有了。 – 2012-03-07 12:53:00

+0

或者您可以將選定的菜單編號直接分配給變數「選擇」。這也會起作用。檢查我的答案。 – 2012-03-07 12:57:14

3

choice設置爲0。您是否打開menuNumber

+0

menuNumber來自我有switch語句之前的原始代碼。我可以刪除嗎?我試圖改變它的選擇,但它給了我一個紅線。另外它說我必須初始化選擇。如果我將它設置爲1,它會保持爲1嗎?我能做些什麼? – 2012-03-07 12:50:32

+0

當您將menuNumber更改爲選項時,生成您輸入的確切代碼爲紅色。 – Raveline 2012-03-07 12:54:57

+0

@Raveline對不起,我花了這麼長時間回覆我準備工作。無論如何,當我將menuNumber更改爲選項 – 2012-03-07 13:25:25

0

是的,您將驗證器的輸出分配給menuNumber,但您在choice上執行switch

0

不應該在該行

int menuNumber = Validator.getInt(ip, "Enter menu number: ", 1, 3); 

被轉換爲以下幾點:

choice = Validator.getInt(ip, "Enter menu number: ", 1, 3); 
0

好吧,如前所述,在 「選擇」 變量不用戶的輸入(「menuNumber」,我猜)。這是第一個問題。

現在的問題是:你爲什麼犯這個錯誤?因爲你的代碼太複雜了。如果您閱讀Martin Fowler的「Clean Code」或其他人的建議,您會寫出更好的代碼。兩個簡單的提示:

  • 保留小函數,並且它將更容易識別錯誤。
  • 比「do/while」更喜歡「while」,它更容易閱讀。

胸圍最重要的是,學會使用調試器,有了它,你很快就會發現錯誤。

+0

謝謝你的書建議,我會檢查出來。我從Murach的Java SE6中學習,我的代碼反映了本書中的代碼。我被告知我的編碼在這裏以前不是很漂亮,但我一定會查看那本書。 – 2012-03-07 12:55:30