如何正确使用Scanner类?

时间:2015-01-23 15:54:49

标签: java

我正在上课。由于某种原因,程序完全跳过了用户应该输入变量name的部分。我无法理解为什么它会以这种方式运行,因为我的其余代码位于cardType部分之后(要求String和{int之类的内容{1}}类型工作正常且有序。

        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);

2 个答案:

答案 0 :(得分:1)

在尝试获取用户名之前,您可能需要使用读取的最后一行的结尾:

    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);

答案 1 :(得分:1)

它的行为方式是因为我确信您使用相同的扫描仪对象扫描整数/双值,然后再使用它来扫描名称。

说完并不意味着你必须创建多个扫描仪对象。 (你永远不应该那样做。)

解决这个问题的一个简单方法是扫描字符串,即使你期望整数/双精度并将其强制转换。

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