代码不在switch语句中执行

时间:2012-03-07 12:46:00

标签: java java.util.scanner

我可能错过了一些非常简单的东西,但我是新手,而且更容易寻求帮助。这是家庭作业所以你可以提供线索,但是请理解我对java很恐怖。

以下是地址簿的一些代码。我希望用户输入1以查看条目2以在书中放入另一个条目或3以退出。 我让程序工作,但它没有循环询问用户下一步该做什么。然后我编写了一个switch语句,当用户选择1时,程序没有运行与案例1相关的代码:它与案例2相同。程序确实验证了我的条目(我在一个单独的类中写了一个验证器)< / p>

编码时我是否遗漏了什么?

我再次成为新人,所以不要打败我。

    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);

    }
    }

6 个答案:

答案 0 :(得分:3)

choice设置为0。您的意思是打开menuNumber吗?

答案 1 :(得分:0)

您将选项分配为0(int choice = 0;)并且永远不会更改它,因此在交换机中它既不匹配也不匹配。

应该是

switch (menuNumber)

答案 2 :(得分:0)

是的,您已将验证者的输出分配给menuNumber,但您正在switch上执行choice

答案 3 :(得分:0)

您不能更改变量choice的值。因此它仍然是0&#39; 0正如你在开始时初始化的那样。所以你的代码永远不会进入case语句。这就是问题所在。请尝试以下方法:

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

答案 4 :(得分:0)

不应该这一行

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

转换为以下内容:

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

答案 5 :(得分:0)

好吧,如前所述,“选择”变量不是用户的输入(我猜是“menuNumber”)。这是第一个问题。

现在问题是:你为什么犯这个错误?因为你的代码太复杂了。如果您阅读Martin Fowler的“清洁代码”或其他人的建议,您可以编写更好的代码。两个简单的提示:

  • 保留小功能,识别错误会更容易。
  • 更喜欢“while”而非“do / while”,它更容易阅读。

最重要的是,学习使用调试器,用它,你很快就会发现错误。