Этот код отлично работает, когда PIN-код неправильный, но когда он правильный, он прерывается с первого цикла и затем продолжает запрашивать PUK. Я хочу, чтобы он работал так, чтобы при правильном ПИН-коде вся программа ломалась.

Это код:

import java.util.Scanner;

public class PINDemo {
public static void main(String [] args) {

    String PIN = "12345";
    String PUK = "123456789";
    int attempts = 1;
    String entry;
    Scanner obj = new Scanner(System.in);       
    lab1:do {
        System.out.println("Enter your PIN");
        attempts++;
        entry = obj.next();


        if(!entry.equals(PIN)) {
            System.out.println("Wrong PIN. Attempt "+attempts);
        }
        else {
            System.out.println("PIN Correct. SIM Unlocked");
            break ;

        }

    }while(attempts < 4);


    System.out.println("PIN Blocked. Please enter your PUK");
    for(attempts = 1;attempts < 4; attempts++) {
        entry = obj.next();
        if(!entry.equals(PUK)) {
            System.out.println("Wrong PUK try again");

        }
        else {
            System.out.println("PUK Correct. SIM Unlocked");
        }


}

    }

}
-2
G.kip 21 Сен 2018 в 13:34

2 ответа

Лучший ответ

Здесь я не эксперт по Java, но я предлагаю написать код в более управляемой форме. (т.е. отделить поток ввода данных от логики более высокого уровня)

import java.util.Scanner;

class CodeEntry
{
     private Scanner scanner = new Scanner(System.in);
     private String entryMessage;
     private int guessCount;
     private String secretValue;

     public CodeEntry(String entryMessage, int guessCount, String secretValue, String WrongCodeMessage, String RightCodeMessage, String OutOfAttemptsMessage)
     {
         this.scanner = scanner;
         this.entryMessage = entryMessage;
         this.guessCount = guessCount;
         this.secretValue = secretValue;

         this.WrongCodeMessage = WrongCodeMessage;
         this.RightCodeMessage = RightCodeMessage;
         this.OutOfAttemptsMessage = OutOfAttemptsMessage;
     }

     private String getAttemptString(int attempt)
     {
         return "Attempt " + (attempt + 1) + "/" + guessCount;
     }

     private String WrongCodeMessage;
     private String RightCodeMessage;
     private String OutOfAttemptsMessage;

     public boolean EnterCode()
     {
          boolean guessed = false;

          for (int attempt = 0; attempt < guessCount; attempt++)
          {
              System.out.println(entryMessage);
              guessed = secretValue.equals(scanner.next());

              if (guessed)
              {
                  System.out.println(RightCodeMessage);
                  break;
              }

              System.out.println(WrongCodeMessage + " " + getAttemptString(attempt));
          }

          if (!guessed)
          {
              System.out.println(OutOfAttemptsMessage);
          }

         return guessed;
    }
}

public class MyClass {
    public static void main(String args[]) {
        CodeEntry pinEntry = new CodeEntry("Enter your PIN", 3, "12345", "Wrong PIN, try again.", "PIN Correct. SIM Unlocked", "PIN Blocked");
        if (!pinEntry.EnterCode())
        {
            CodeEntry pukEntry = new CodeEntry("Enter your PUK", 3, "123456789", "Wrong PUK, try again.", "PUK Correct. SIM Unlocked", "SIM Blocked");
            if (!pukEntry.EnterCode())
            {
                //badjuju - if needed
            }
        }
    }
}
0
Alexandru Clonțea 21 Сен 2018 в 11:50

У вас есть код для «PIN-кода заблокирован» вне цикла do while, поэтому он все равно будет запрашивать «PIN-код заблокирован. Введите свой PUK-код».
Используйте флаг для isPinCorrect, например

import java.util.Scanner;

public class PINDemo {
public static void main(String [] args) {
    boolean isPinCorrect=false;
    String PIN = "12345";
    String PUK = "123456789";
    int attempts = 1;
    String entry;
    Scanner obj = new Scanner(System.in);       
    lab1:do {
        System.out.println("Enter your PIN");
        attempts++;
        entry = obj.next();


        if(!entry.equals(PIN)) {
            System.out.println("Wrong PIN. Attempt "+attempts);
        }
        else {
            System.out.println("PIN Correct. SIM Unlocked");
            isPinCorrect=true;
            break ;

        }

    }while(attempts < 4);

if(!isPinCorrect)  //This will only run if pin is blocked
 {
    System.out.println("PIN Blocked. Please enter your PUK");
    for(attempts = 1;attempts < 4; attempts++) {
        entry = obj.next();
        if(!entry.equals(PUK)) {
            System.out.println("Wrong PUK try again");

        }
        else {
            System.out.println("PUK Correct. SIM Unlocked");
        }
      }
  }

    }

}
0
Tarun 21 Сен 2018 в 11:24