找不到线路:如何为环路创建新线路?

时间:2016-01-08 01:48:02

标签: java while-loop nosuchelementexception

Scanner input = new Scanner(System.in);

    int command = 0;
    boolean mainbool = true;

    while (mainbool){
    System.out.println("Enter in a command code.  For a list of commands, type \"100\" and press \"Enter\".");

    if (input.hasNextInt()){
        command = input.nextInt();
    }
    input.nextLine();

    switch (command){
        case 1:
            addition();
            break;
        case 2:
            subtraction();
            break;
        case 3:
            multiplication();
            break;
        case 4:
            division();
            break;
        case 100:
            System.out.println("1   Addition\n2 Subtraction\n3  Multiplication\n4   Division");
            break;
        default: System.out.println("You didn't type in one of the options correctly.");
    }
    }

    input.close();
  

此程序中抛出的异常是:   "线程中的异常" main"输入命令代码。对于命令列表,>键入" 100"然后按"输入"。   java.util.NoSuchElementException:找不到行     在java.util.Scanner.nextLine(未知来源)     在SimpleCalculator.main(SimpleCalculator.java:177)"

这只是我为学校制作的一个超级简单的程序。我意识到扫描程序已经没用了,但是为了这个程序的目的,我需要它循环返回并以与第一次运行此代码时相同的方式运行。这意味着(根据我读过的其他帖子)我需要为扫描仪创建一个新行来运行。有关如何的任何想法?

1 个答案:

答案 0 :(得分:-1)

因为System.in永远不会关闭,直到你关闭它或发生奇怪的事情(我从未在程序结束前看到它关闭),你只需要重新考虑你的控制流程。

首先,使用Scanner#next<anything but line>会导致意外行为,因为换行字符不会被读取。因此,你应该考虑做这样的事情

int option = Integer.parseInt(scanner.nextLine());

其次,请记住Scanner#nextLine将阻止线程,直到给出输入。这意味着您不需要检查是否有输入。对于像这样的简单控制台应用程序,您应该能够假设始终给出输入。

考虑到这一点,您可以像这样重写代码:

Scanner input = new Scanner(System.in);
while(true) {
    System.out.println("Enter in a command code.  For a list of commands, type \"100\" and press \"Enter\".");
    int command = Integer.parseInt(input.nextLine());

    switch (command) {
    case 1:
        addition();
        break;
    case 2:
        subtraction();
        break;
    case 3:
        multiplication();
        break;
    case 4:
        division();
        break;
    case 100:
        System.out.println("1    Addition\n2 Subtraction\n3  Multiplication\n4   Division");
        break;
    default:
        System.out.println("You didn't type in one of the options correctly.");
    }
}

input.close();

您需要添加一些内容以确保while(true)将在某个时候退出。也许让选项5退出?