sc.nextLine() 抛出 InputMismatchException,而 sc.next() 则不会

问题描述 投票:0回答:1

在下面的代码片段中,在我输入 coach 的值并按 Enter 键后,扫描仪抛出

InputMismatchException
。但是,如果我使用
coach=sc.next();
,则不会引发此类异常。

void accept() {
        System.out.println("Enter name , mobile number and coach for the customer and also the amount of ticket.");
        name=sc.nextLine();
        mobno= sc.nextLong();
        coach=sc.nextLine();
        amt=sc.nextInt();
    }

我预计在这两种情况下都不会出现异常,但是我无法理解为什么仅针对

sc.nextLine();
抛出异常。 谢谢大家!

java java.util.scanner inputmismatchexception
1个回答
1
投票

当您调用 sc.nextLine() 来读取 coach 时,它会遇到上一个 nextLong() 调用留下的换行符。结果,它读取一个空行(将换行符解释为输入行)并继续,而不让您输入教练名称

我的建议是始终使用 nextLine() 并强制转换为所需的 Class,如下所示:

void accept() {
    System.out.println("Enter name , mobile number and coach for the customer and also the amount of ticket.");
    name = sc.nextLine();
    
    // Cast long value
    mobno = Long.valueOf(sc.nextLine());
    
    coach = sc.nextLine();
    
    // Cast int value
    amt = Integer.parseInt(sc.nextLine());
}

看看这个:

但是你也可以这样做:

void accept() {
    System.out.println("Enter name, mobile number, coach for the customer, and also the amount of ticket.");
    name = sc.nextLine();
    mobno = sc.nextLong();

    // Consume the remaining newline character in the input buffer
    sc.nextLine();

    coach = sc.nextLine();
    amt = sc.nextInt();
}
© www.soinside.com 2019 - 2024. All rights reserved.