在下面的代码片段中,在我输入 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();
抛出异常。
谢谢大家!
当您调用 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();
}