【发布时间】:2021-05-19 23:08:53
【问题描述】:
我有以下代码
public class ShoppingCartPrinter {
public static void main(String[] args) {
String productName;
int productPrice = 0;
int productQuantity = 0;
int cartTotal = 0;
String testStr = "Chocolate Chips\n3\n1\nChocolate Chips\n3\n1";
Scanner scnr = new Scanner(testStr);
productName = scnr.nextLine();
System.out.println("1st Name " + productName);
productPrice = scnr.nextInt();
System.out.println("1st Price " + productPrice);
productQuantity = scnr.nextInt();
System.out.println("1st Quantity " + productQuantity);
System.out.println();
//scnr.nextLine();
productName = scnr.nextLine();
System.out.println("2nd Name " + productName);
productPrice = scnr.nextInt();
System.out.println("2nd Price " + productPrice);
productQuantity = scnr.nextInt();
System.out.println("2nd Quantity " + productQuantity);
}
}
所以如果我不包括第 27 行,我会得到一个带有错误消息的输出:
1st Name Chocolate Chips
1st Price 3
1st Quantity 1
2nd Name
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at ShoppingCartPrinter.main(ShoppingCartPrinter.java:30)
我知道第 28 行的 scnr.nextLine() 读取不正确,因为之前的 scnr.nextInt() 没有使用 /n。但是,我不明白为什么第 31 行的 scnr.nextInt() 不会继续读取字符串中的下一个整数?
另外,如果 nextInt() 只能在一行内读取,或者它不能通过 /n,那么读取第一个数量的第二个 nextInt() 也应该给出错误,但它没有。
【问题讨论】:
-
第 27 行是哪一行?
-
scnr.nextInt()尝试读取的令牌是Chocolate Chips。因此,InputMismatchException. -
第 27 行是
//scnr.nextLine(); -
为什么
scnr.nextInt()不尝试阅读Chocolate Chips\n3\n1而只是Chocolate Chips? -
不,解释的问题
nextInt()没有读取/n,但没有说明为什么nextInt()不会读取Chocolate Chips\n3\n1而只有Chocolate Chips
标签: java input java.util.scanner newline next