Java 如何正确使用Scanner类?
我正在做课堂作业。由于某种原因,程序完全跳过了用户应该键入变量Java 如何正确使用Scanner类?,java,Java,我正在做课堂作业。由于某种原因,程序完全跳过了用户应该键入变量name的部分。我想不出它为什么会这样,因为在cardType部分之后的代码的其余部分(它要求String和int类型可以正常有序地工作) System.out.println("Enter the card information for wallet #" + (n+1) + ":\n---\n"); System.out.p
name
的部分。我想不出它为什么会这样,因为在cardType
部分之后的代码的其余部分(它要求String
和int
类型可以正常有序地工作)
System.out.println("Enter the card information for wallet #" +
(n+1) + ":\n---\n");
System.out.println("Enter your name:");
String name = scan.nextLine();
name = capitalOf(name);
System.out.println("Enter card type");
String cardType = scan.nextLine();
cardType = capitalOf(cardType);
在尝试获取用户名之前,您可能需要使用最后一行的结尾:
scan.nextLine(); // add this
System.out.println("Enter the card information for wallet #" +
(n+1) + ":\n---\n");
System.out.println("Enter your name:");
String name = scan.nextLine();
name = capitalOf(name);
System.out.println("Enter card type");
String cardType = scan.nextLine();
cardType = capitalOf(cardType);
它的行为是这样的,因为我很确定在使用它扫描名称之前,您使用了相同的scanner对象来扫描整数/双精度值 话虽如此,但这并不意味着您必须创建多个扫描仪对象。(您永远不应该这样做) 解决这个问题的一个简单方法是扫描字符串,即使您期望的是整数/双精度,也要将其强制转换回来
Scanner scn = new Scanner(System.in);
int numbers = scn.nextInt(); //If you do this, and it skips the next input
scn.nextLine(); //do this to prevent skipping
//I prefer this way
int numbers = Integer.toString(scn.nextLine());
String str = scn.nextLine(); //No more problems
您是否尝试在调试器中单步执行代码?如果是,您看到了什么?如果您在代码中调用了
nextLine()
或nextDouble()
,请在下次调用nextLine()之前调用nextLine()
(并忽略内容)
。在这一行之前扫描仪是如何使用的?我想再添加一个,尽管它与所问的问题无关。如果您的方法capitalOf(name)将字符串转换为大写。我建议您使用string类中定义的内置方法toUpper(如果您的教授允许)。这个问题实际上已经被不同的用户提出过很多次。谢谢!!在它是“scan.nextLine();”之前,它是否需要一个“int”值?@user2603506包含由nextLine()读取的int的输入行的结尾由以下nextLine()调用返回。这就是为什么必须添加nextLine()的原因,以便从下一个输入行读取用户名。