Java 程序跳过clavier.nextLine

Java 程序跳过clavier.nextLine,java,if-statement,next,skip,Java,If Statement,Next,Skip,在运行以下代码时,当我回答以下问题:您是否拥有超过18年的工作经验时,它会直接说: -你是成年人了 -创建您的密码 -请创建一个介于6到10个字母之间的密码 而它应该在创建密码时停止。等待我的输入,如果输入长度超出范围,则应显示下一条消息 但它不会等待我的输入并显示下一条消息 当我删除该问题时: 你有超过18年的工作经验吗?是/否 这个程序运行得很好 import java.util.Scanner; class ScannerTest { public static void mai

在运行以下代码时,当我回答以下问题:您是否拥有超过18年的工作经验时,它会直接说:

-你是成年人了 -创建您的密码 -请创建一个介于6到10个字母之间的密码

而它应该在创建密码时停止。等待我的输入,如果输入长度超出范围,则应显示下一条消息

但它不会等待我的输入并显示下一条消息

当我删除该问题时: 你有超过18年的工作经验吗?是/否

这个程序运行得很好

import java.util.Scanner;

class ScannerTest {
    public static void main(String[] args) {
        Scanner clavier = new Scanner(System.in);
        String name;
        String password;
        String time;
        char adult;

        System.out.println("Hello,create your username:\t");
        name = clavier.nextLine();

        System.out.println("Welkom " + name);
        System.out.println("Do you have more than 18 years? (Yes/No)");
        adult = clavier.findWithinHorizon(".", 0).charAt(0);

        if (adult == 'y' || adult == 'Y') {
            System.out.println("you are adult");
        } else {
            System.exit(0);
        }

        System.out.println("create your password:\t");
        password = clavier.nextLine();
        while ((password.length() < 6) || (password.length() > 10)) {
            System.out.println("please create a password between 6 and 10 letters");
            password = clavier.nextLine();
        }

        String password2;
        System.out.println("Please write your password again");
        password2 = clavier.nextLine();
        while (!password2.equals(password)) {
            System.out.println("your passwords aren't the same");
            password2 = clavier.nextLine();
        }
        System.out.println("acount create");
    }
}
这:

不处理行尾EOL令牌,因此它会在您下次调用clavier.nextLine时被吞没,将您弄得一团糟。一种解决方案是在上面一行之后立即调用clavier.nextLine

adult= clavier.findWithinHorizon(".", 0).charAt(0);
clavier.nextLine(); // to handle and dispose the EOL token
或者只需在上述代码中使用nextLine:

adult = clavier.nextLine().charAt(0);

问题在于这条线

clavier.findWithinHorizon(".", 0).charAt(0);
根据此方法的文档

如果“地平线”为0,则忽略地平线并 *此方法继续在输入中搜索 *没有绑定的指定模式。在这种情况下,它可能会缓冲所有 *搜索模式的输入

因此,您可以使用以下代码,而不是使用该代码。 我基本上已经将char成人转换为String成人,并像在您的其他案例中一样使用nextLine方法

 import java.util.Scanner;

class mmm {

    public static void main(String[] args) {
        Scanner clavier = new Scanner(System.in);
        String name;
        String password;
        String time;
        String adult;

        System.out.println("Hello,create your username:\t");
        name = clavier.nextLine();
        System.out.println("Welkom " + name);

        System.out.println("Do you have more than 18 years? (Yes/No)");

        //adult = clavier.findWithinHorizon(".", 0).charAt(0);
        adult = clavier.nextLine();
        if (adult.equalsIgnoreCase("y")) {
            System.out.println("you are adult");
        } else {
            System.exit(0);

        }

        System.out.println("create your password:\t");

        password = clavier.nextLine();

        while ((password.length() < 6) || (password.length() > 10)) {
            System.out
                    .println("please create a password between 6 and 10 letters");
            password = clavier.nextLine();
        }

        String password2;
        System.out.println("Please write your password again");
        password2 = clavier.nextLine();
        while (!password2.equals(password)) {
            System.out.println("your passwords aren't the same");
            password2 = clavier.nextLine();
        }
        System.out.println("acount create");

    }
}

不知怎么的,这对我很有用。您得到的错误是什么?@MohitKanwar:没有错误消息,但它跳过了一行。它会自动转到说明输入的密码不正确的行。请检查一下。还有,为什么人们投反对票是一个合理的问题?@HovercraftFullOfEels-Ohh。我错过了它,因为消息序列看起来合乎逻辑。显示请求创建密码后密码所需的字符数:“我现在明白这个问题了。”由于描述不太清楚,很多人对这个问题投了反对票。我已经尝试过编辑它,如果它能使它变得更好的话。请批准。@MohitKanwar:批准了。
 import java.util.Scanner;

class mmm {

    public static void main(String[] args) {
        Scanner clavier = new Scanner(System.in);
        String name;
        String password;
        String time;
        String adult;

        System.out.println("Hello,create your username:\t");
        name = clavier.nextLine();
        System.out.println("Welkom " + name);

        System.out.println("Do you have more than 18 years? (Yes/No)");

        //adult = clavier.findWithinHorizon(".", 0).charAt(0);
        adult = clavier.nextLine();
        if (adult.equalsIgnoreCase("y")) {
            System.out.println("you are adult");
        } else {
            System.exit(0);

        }

        System.out.println("create your password:\t");

        password = clavier.nextLine();

        while ((password.length() < 6) || (password.length() > 10)) {
            System.out
                    .println("please create a password between 6 and 10 letters");
            password = clavier.nextLine();
        }

        String password2;
        System.out.println("Please write your password again");
        password2 = clavier.nextLine();
        while (!password2.equals(password)) {
            System.out.println("your passwords aren't the same");
            password2 = clavier.nextLine();
        }
        System.out.println("acount create");

    }
}