在运行以下代码时,当我回答问题时:你有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");
}
}
2条答案
按热度按时间x4shl7ld1#
这一点:
不处理行尾(EOL)令牌,因此在您下一次调用
clavier.nextLine()
时会吞下它,这会使您陷入混乱。一种解决方案是在上面的行之后立即调用clavier.nextLine()
或者简单地在上面的代码中使用nextLine:
btxsgosb2#
问题出在这条线上
根据该方法的文档
如果horizon是
0
,则忽略horizon,* 此方法继续在输入中搜索,查找 * 指定的模式,没有边界。在这种情况下,它可以缓冲搜索模式的所有输入。因此,您可以使用以下代码来代替它。我基本上已经将
char adult
转换为String adult
,并使用了nextLine()
方法,就像在其他情况下一样。