我编写了这个程序,它打印了一个额外的东西



程序在主程序中使用while循环菜单来请求用户命令:

public static void main(String[] args)throws Exception
{
    Boolean meow = true;
    while(meow)
    {
        System.out.println("n  1. Show all records.n"
            + "  2. Delete the current record.n"
            + "  3. Change the first name in the current record.n"
            + "  4. Change the last name in the current record.n"
            + "  5. Add a new record.n"
            + "  6. Change the phone number in the current record.n"
            + "  7. Add a deposit to the current balance in the current record.n"
            + "  8. Make a withdrawal from the current record if sufficient funds are available.n"
            + "  9. Select a record from the record list to become the current record.n"
            + " 10. Quit.n");
        System.out.println("Enter a command from the list above (q to quit): ");
        answer = scan.nextLine();
        cmd.command(answer);
        if(answer.equalsIgnoreCase("10") || answer.equalsIgnoreCase("q"))
        {
            meow = false;
        }
    }
}

如果您选择的所有命令都不是菜单上的实际命令,则会发生以下情况:

else
        {
            System.out.println("Illegal command");
            System.out.println("Enter a command from the list above (q to quit): ");
            answer = scan.nextLine();
            command(answer);
        }

每当我添加一个新的人或使用任何需要我按回车键来完成输入值的命令时,我都会得到else语句,然后是常规的命令请求。

就像

Enter a command from the list above (q to quit): 
Illegal command
Enter a command from the list above (q to quit): 

当这种情况发生时。

我不打算把我的全部代码贴在这里,我害怕它,因为它太多了。用它们的pastebin代替。

  • 我的完整主类:http://pastebin.com/rUuKtpXb
  • My full not Main Class: http://pastebin.com/UE4H76Cd

有人知道为什么会这样吗?

问题是像Scanner::nextDouble这样的东西不读取换行字符,所以下一个Scanner::nextLine返回空行。

将所有出现的Scanner::nextLine替换为Scanner::next应该可以修复它。

您也可以在最后一个非nextLine next方法之后执行Scanner::nextLine,但这有点混乱。

我要推荐的其他一些东西:

  1. 在程序开头添加scan.useDelimiter("n");,在一行中添加空格进行测试,您将看到为什么需要这样做。

  2. println更改为print,以便在同一行中输入命令。例如:

    改变
    System.out.println("Enter a command from the list above (q to quit): ");`
    

    System.out.print("Enter a command from the list above (q to quit): ");
    
  3. 改变:

    else
    {
        System.out.println("Illegal command");
        System.out.println("Enter a command from the list above (q to quit): ");
        answer = scan.nextLine();
        command(answer);
    }
    

    :

    else System.out.println("Illegal command");
    

    您将再次打印菜单,但您将避免不必要的递归。这样很容易避免再次打印菜单。

  4. 最好在运行command之前检查退出(然后您可以在command中删除该检查)。

    System.out.println("Enter a command from the list above (q to quit): ");
    answer = scan.nextLine();
    if (answer.equalsIgnoreCase("10") || answer.equalsIgnoreCase("q"))
        meow = false;
    else
        cmd.command(answer);
    
  5. Boolean更改为booleanBooleanboolean的包装类,在本例中不需要。

也许它在while循环结束时在缓冲区中留下n,就在再次输入之前。也许

while(meow)
{
  scan.nextLine();

相关内容

  • 没有找到相关文章

最新更新