如何解决密码输入中的else / if问题?

时间:2018-05-30 07:10:40

标签: java if-statement

我写了一个用户可以登录的程序。下面你看到我为密码输入编写的一些代码,但是第二个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");
        }
    }
}

4 个答案:

答案 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!");