Как решить проблемы else / if при вводе пароля? - PullRequest
0 голосов
/ 30 мая 2018

Я написал программу, в которую пользователи могут войти.Ниже вы видите некоторые коды, которые я написал для ввода пароля, но второй 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 голосов
/ 30 мая 2018

scanner.hasNextInt() проверить, является ли значение int или нет, но оно не потребляет значение.но в вашем коде «пароль не совпадает» case сканер пройдет два вызова if и два вызова 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");        
 }
0 голосов
/ 30 мая 2018

Мне нужна петля while.

while (passwordInput.nextInt() != builtInPassword) {
   System.out.println("Incorrect password");
}
System.out.println("Correct password!");
0 голосов
/ 30 мая 2018

Как отметили другие, проблема в том, что вы звоните 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");
}
0 голосов
/ 30 мая 2018

Проблема в том, что вы вызываете nextInt () во всех if.Таким образом, вы в основном ждете другого ввода каждый раз, когда вызываете 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");
}

Я пишу здесь без компилятора, поэтому я не уверен, что он будет правильно скомпилирован, но вы можете понять суть;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...