состояние внутри другого в JAVA - PullRequest
0 голосов
/ 06 октября 2019

разрешить пользователю получать только 3 попытки, после чего он приостановил свою учетную запись Я пытался попросить пользователя ввести окончательный пароль 3 раза, если он этого не сделает, то сообщит ему, что его учетная запись заблокированаи если это правильно, дает ему приветственное сообщение.


package EE;
import java.util.Scanner;
public class test {
    public static void main(String[] args) {
            final String password= "Test";
            Scanner sc = new Scanner(System.in);
            System.out.println("Please enter the password: ");
            String pass = sc.next();
            for (int i=0; i<2;) {
            if (!pass.equals (password))
                i++;
                System.out.println("Try again! ");
                String pass1 = sc.next();
                     if(pass.equals( password))
                        System.out.println("Welcome");
                        String pass2 = sc.next();
                    if (i == 2)
            System.out.println("Sorry, your account is suspened");      
    }
}}

1 Ответ

0 голосов
/ 06 октября 2019

Как прокомментировал Alea, вам нужно использовать фигурные скобки { ... } вокруг блоков в ваших if утверждениях:

for (int i=0; i<2;) {
if (!pass.equals (password))
    i++;
    System.out.println("Try again! ");
    String pass1 = sc.next();
         if(pass.equals( password))
            System.out.println("Welcome");
            String pass2 = sc.next();
        if (i == 2)
System.out.println("Sorry, your account is suspened");
} 

фактически означает это:

for (int i = 0; i < 2; ) {
    if (!pass.equals(password)) {
        i++;
    }
    System.out.println("Try again! ");
    String pass1 = sc.next();
    if (pass.equals(password)) {
        System.out.println("Welcome");
    }
    String pass2 = sc.next();
    if (i == 2) {
        System.out.println("Sorry, your account is suspened");
    }
}

Как только мы получимправильно сделал отступ в коде и добавил фигурные скобки в тех местах, где их ожидает компилятор, мы можем начать видеть некоторые проблемы.

Например:

  1. Когдапароль правильный, ничего не будет увеличиваться i. Это означает, что i < 2 не будет истинным, и цикл будет продолжаться и вокруг.

  2. Вы вызываете next() дважды для каждой итерации цикла.

И так далее.

Теперь я могу просто переписать ваш код для вас 1 . Но вы многому не научитесь из этого. (Вы лучше всего научитесь писать код для себя, делать ошибки, находить и исправлять их ... сами!)

Вместо этого я собираюсь рекомендовать вам прочитать об отладке Rubber Duck техника. Это может звучать как шутка, но это не так. Это важная техника, объясненная с юмором. И это то, чему меня учили как способ отладки программ, еще когда мне было 18 лет, и я учился программировать 2 .

Идея отладки Rubber Duck заключается в том, чтобы помочь вам понять, каккомпьютер "думает". Как только вы можете это сделать, программирование становится намного проще. И именно поэтому я настоятельно рекомендую вам сделать это самостоятельно!

В любом случае, как только вы сможете визуализировать, что код делает неправильно, следующим шагом будет выяснить, что должен делать. .


1 - Для начала было бы быстрее!

2 - Хотя мы не называли его по этому имени обратнотогда. Мы назвали это ручным исполнением, и мы сделали это карандашом и бумагой. Вообще на обороте старые компьютерные распечатки. Да, давным-давноИ в те дни у нас не было отладчиков или IDE. Это были перфокарты и 20 минут ожидания, чтобы вернуть распечатку!

...