0

所以这是我正在使用的代码:

System.out.println("Create a name.");
name = input.nextLine();
System.out.println("Create a password.");
password = input.nextLine();

但是当它到达这一点时,它只会说“创建一个名称”。和“创建密码”。两者同时,然后我必须输入一些东西。所以它基本上跳过了我需要输入字符串的扫描仪部分。在“创建名称”之后。和“创建密码”。打印出来,然后我输入,名称和密码都更改为我输入的内容。我该如何解决这个问题?

这是全班。我只是在测试,所以它实际上并不是一个程序:

package just.testing;

import java.util.Scanner;
public class TestingJava
{
    static int age;
    static String name;
    static String password;
    static boolean makeid = true;
    static boolean id = true;

    public static void main(String[] args){
        makeid(null);
        if(makeid == true){
            System.out.println("Yay.");
        }else{

        }
    }
    public static void makeid(String[] args){
        System.out.println("Create your account.");
        Scanner input = new Scanner(System.in);
        System.out.println("What is your age?");
        int age = input.nextInt();
        if(age<12){
            System.out.println("You are too young to make an account.");
            makeid = false;
            return;
        }
        System.out.println("Create a name.");
        name = input.nextLine();
        System.out.println("Create a password.");
        password = input.nextLine();
        return;
    }
}

对不起我的语法不好。我不是英国人,所以我很难解释这一点。

4

4 回答 4

10

nextInt() 吃掉了输入数字,但没有吃掉 EOLN:

Create your account.
What is your age?
123 <- Here's actually another '\n'

所以在创建名称后第一次调用 nextLine() 接受它作为输入。

System.out.println("Create a name.");
name = input.nextLine(); <- This just gives you "\n"

用户 Integer.parseInt(input.nextLine()) 或在读取数字后添加另一个 input.nextLine() 将解决此问题:

int age = Integer.parseInt(input.nextLine());

或者

int age = input.nextInt();
input.nextLine()

另请参阅此处以获取重复的问题。

于 2013-02-15T16:16:38.043 回答
1

这实际上并没有告诉您为什么要跳过这些行,但是当您捕获名称和密码时,您可以使用控制台:

Console console = System.console();
String name = console.readLine("Create a name.");
char[] password = console.readPassword("Create a password.");
System.out.println(name + ":" + new String(password));
于 2013-02-15T16:17:22.787 回答
0

您也可以使用 next() 代替 nextLine()。我已经在eclipse中测试过了。它工作正常。

于 2013-02-15T16:20:31.097 回答
0

next()可以工作,但它不会读取空格后的字符串。

于 2015-08-19T09:48:40.837 回答