为了账号安全,请及时绑定邮箱和手机立即绑定

进程意外终止

进程意外终止

梵蒂冈之花 2022-06-23 20:51:47
我试图将新值放入数组中,但由于某种原因,扫描仪等待我的输入时进程终止。相关部分:数组: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();该过程终止。try {} 仅用于测试目的和我自己搜索错误但我找不到它。
查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

正如@TiiJ7 在评论中所说。从同一个 Scanner 收集整数和字符串时必须小心,因为 nextInt() 将其\n留在缓冲区中,这将导致任何 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字符。


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信