无限循环;不明白怎么做

时间:2013-11-28 18:37:33

标签: java loops while-loop

在下面的代码中,当我输入除整数值之外的任何内容时,代码不会再次请求我的输入,只是无限循环字符串输出。一点帮助......

    int choice = 0;
    while(choice == 0)
    {
        try
        {
            System.out.println("Start by typing the choice number from above and hitting enter: ");
            choice = input.nextInt();
        }
        catch(Exception e)
        {

        }

        if ((choice == 1) || (choice == 2) || (choice == 3))
        {
            break;
        }
        else
        {
            System.out.println("Invalid choice number. Please carefully type correct option.");
            choice = 0;
        }
    }

6 个答案:

答案 0 :(得分:3)

输入非整数时,不会消耗它。你需要扫描过去。例如,可以通过向input.nextLine()块添加catch语句来完成此操作。这将消耗无效输入并允许程序读取新数据。

这将解决您的问题:

catch(Exception e)
{
    input.nextLine(); // Consume the invalid line
    System.out.println("Invalid choice number. Please carefully type correct option.");
}

您还可以将该行读作字符串并尝试使用Scanner.nextLineInteger.parseInt将其解析为数字,但我更喜欢将nextInt用于整数。它使代码的目的更加清晰(在我看来)。

答案 1 :(得分:2)

当使用nextInt并且下一个输入不是int时,它将抛出异常,但消耗数据,即下一个调用将立即返回,因为数据仍然是当下。

您可以通过使用skip之类的模式调用[^0-9]*方法来解决此问题,以跳过所有无效输入。那么像“aaa3”这样的输入就可以了。如果您想忽略所有内容,请使用.*作为模式。

答案 2 :(得分:1)

您使用的是Scanner(system.in);套餐中的import java.util.Scanner;吗? 尝试在catch中添加input.nextLine();以清除值以停止无限循环。

public static void main(String[] args) {

int choice = 0;
Scanner input = new Scanner(System.in);

while(choice == 0)
{
    try
    {
        System.out.println("Start by typing the choice number from above and hitting enter: ");
        choice = input.nextInt();
    }
    catch(Exception e)
    {
        input.nextLine();
        System.out.println("Invalid choice number. Please carefully type correct option.");
    }

    if ((choice == 1) || (choice == 2) || (choice == 3))
    {
        break;
    }
    else
    {
        System.out.println("Invalid choice number. Please carefully type correct option.");
        choice = 0;
    }
 }
}

答案 3 :(得分:1)

问题是您没有消耗流中的剩余数据。我使用以下代码解决了这个问题,尽管在程序中使用代码之前,您需要更好地记录代码:

int choice = 0;
while(choice == 0)
{
    try
    {
        System.out.print("Start by typing the choice number from above and hitting enter: ");
        choice = input.nextInt();
    }
    catch(Exception e)
    {
        input.next();
        System.out.println("Invalid choice number. Please carefully type correct option.");
    }

    if ((choice == 1) || (choice == 2) || (choice == 3))
    {
        break;
    }
    choice = 0;
}

答案 4 :(得分:1)

您可以按如下方式简化和减少代码:

    int choice;
    System.out.println("Start by typing the choice number from above and hitting enter: ");
    while(true)
    {
        try {
            choice = input.nextInt();
            if ((choice == 1) || (choice == 2) || (choice == 3))
                break;
        } catch(InputMismatchException e) {  // handle only the specific exception
            input.nextLine();                // clear the input
        }
    System.out.println("Invalid choice number. Please carefully type correct option.");
    }

答案 5 :(得分:0)

choice = input.nextInt();行中看起来像 选择值始终为0.之后不久打印选择。

对于非整数值,添加一个从循环中断的条件。