我写了一个用户可以登录的程序。下面你看到我为密码输入编写的一些代码,但是第二个if
代码无法正常工作。
请帮我找到问题所在。为什么它不起作用?
import java.util.Scanner;
public class Password {
public static void main(String[] args) {
Scanner passwordInput = new Scanner(System.in);
System.out.print("Please enter your password: ");
int builtInPassword = 1254;
if (passwordInput.hasNextInt() && passwordInput.nextInt() == builtInPassword) {
System.out.println("Your password is correct.");
} else if (passwordInput.hasNextInt() && passwordInput.nextInt() != builtInPassword) {
System.out.println("The password entered is incorrect");
} else {
System.out.println("Sorry, please enter the right format");
}
}
}
答案 0 :(得分:1)
问题是你在所有ifs中调用nextInt()。这样,每次调用passwordInput.nextInt()时,基本上都会等待另一个输入。
尝试保存用户输入,然后检查密码。类似的东西:
if (passwordInput.hasNextInt()) {
int pass = passwordInput.nextInt();
if (pass == builtInPassword) {
System.out.println("Your password is correct.");
} else {
System.out.println("The password entered is incorrect");
}
} else {
System.out.println("Sorry, please enter the right format");
}
我在没有编译器的情况下写作,所以我不确定它是否会正确编译,但你可以得到这个想法;)
答案 1 :(得分:1)
scanner.hasNextInt()
检查值是否为int,但不消耗该值。但在您的代码“pasword not matching”案例扫描程序将经历两个ifs和两个hasNextInt()
调用。因此,如果它将返回假值,则在第二个。
您可以使用以下例外更正和优化代码。
try {
if(passwordInput.nextInt()==builtInPassword){
System.out.println("Your password is correct.");
}else{
System.out.println("The password entered is incorrect");
}
} catch (InputMismatchException e) {
System.out.println("Sorry, please enter the right format");
}
答案 2 :(得分:0)
正如其他人所指出的,问题是您正在调用nextInt()
两次,并且每次尝试获取一个新的int。最简单的解决方案是将您的第一个else
更改为else if (passwordInput.hasNextInt()) {
,因为您已经知道第二个条件(密码错误)来自if
失败的事实。但是,我建议重组你的代码,这样就不需要两次调用hasNextInt
,因为这看起来更清晰:
if (passwordInput.hasNextInt()) {
if (passwordInput.nextInt() == builtInPassword) {
System.out.println("Your password is correct.");
} else {
System.out.println("The password entered is incorrect.");
}
} else {
System.out.println("Sorry, please enter the right format");
}
答案 3 :(得分:-2)
我需要一个while
循环。
while (passwordInput.nextInt() != builtInPassword) {
System.out.println("Incorrect password");
}
System.out.println("Correct password!");