意外终止流程

时间:2019-02-18 15:08:10

标签: java

我正在尝试将新值放入数组,但是由于某种原因,在扫描程序等待我输入的时候,该过程终止了。

相关部分:

数组:

public static String folders[] = { "Ordner 1", "Ordner 2", "Ordner 3", "Ordner 4", "Ordner 5" };
public static BigDecimal value[] = new BigDecimal[5];

还有空白:

public static void session_start() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("");
    System.out.println("Bitte gib einen Befehl ein: ");
    String eingabe = scanner.nextLine();
    switch (eingabe) {
    case "exit": {
        System.exit(1);
    }
    case "neuer Ordner": {
        BigDecimal new_value = new BigDecimal("0");
        System.out.println("Name des Ordners?");
        String name = scanner.nextLine();
        System.out.println("Der wievielte Ordner soll es sein (maximal 5)?");
        int order = scanner.nextInt();
        try {
            System.out.println("Möchtest du einen Betrag zuweisen?");
            String ja_nein = scanner.nextLine();
            if(ja_nein.equals("Ja") || ja_nein.equals("ja")) {
                System.out.println("Bitte gib den Betrag an: ");
                new_value = scanner.nextBigDecimal();
            }
        } catch (Exception f) {
            f.printStackTrace();
        }
        folders[order - 1] = name;
        value[order - 1] = new_value;
    }
    }
}

如果我上线:

System.out.println("Möchtest du einen Betrag zuweisen?");
String ja_nein = scanner.nextLine();

该过程终止。

尝试{}仅用于测试目的,而我自己搜索错误,但我找不到它。

1 个答案:

答案 0 :(得分:0)

正如@ TiiJ7在评论中所说。由于nextInt()将\n留在缓冲区中,从同一Scanner收集整型数和字符串时,您必须be careful,这将导致nextLine之后的所有值立即返回空。大多数经验丰富的Java开发人员实际上都使用2个扫描仪,一个用于数字,另一个用于字符串。

例如:

Scanner stringInput = new Scanner(System.in);
Scanner numInput = new Scanner(System.in);
int valueToScan = numInput.nextInt();
String nextLine = stringInput.nextLine();

在您遇到的情况下,第int order = scanner.nextInt();行在扫描仪的内部缓冲区中保留了\n个字符。因此,当nextLine被调用时,它立即返回一个空字符串,因为它立即击中了其余的\n字符。