Java 程序跳过clavier.nextLine
在运行以下代码时,当我回答以下问题:您是否拥有超过18年的工作经验时,它会直接说: -你是成年人了 -创建您的密码 -请创建一个介于6到10个字母之间的密码 而它应该在创建密码时停止。等待我的输入,如果输入长度超出范围,则应显示下一条消息 但它不会等待我的输入并显示下一条消息 当我删除该问题时: 你有超过18年的工作经验吗?是/否 这个程序运行得很好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
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");
}
}