我正在尝试将新值放入数组,但是由于某种原因,在扫描程序等待我输入的时候,该过程终止了。
相关部分:
数组:
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();
该过程终止。
尝试{}仅用于测试目的,而我自己搜索错误,但我找不到它。
答案 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
字符。