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()的原因,以便从下一个输入行读取用户名。