2012-03-07 97 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