2016-06-08 11 views
0

Ich versuche es so zu machen, dass, wenn der Benutzername und/oder das Passwort nicht korrekt sind, das Programm es erneut ausführen wird, anstatt nur den Druckbefehl in der else-Anweisung auszuführen. Ich versuchte, eine andere while-Schleife in die else-Anweisung einzufügen und die if-Anweisung darin zu verschachteln, die den Benutzernamen und das Passwort darin prüfte, aber dann erkannte ich, dass ich den gesamten Code aus der if-Anweisung in die else-Anweisung kopieren müsste wie es ist nicht die richtige Lösung und ist wahrscheinlich sehr klobig. Was ist der richtige Weg, um das Programm von Anfang an oder etwas zurück zu verweisen?Ich führe mein Programm in Java aus

// Declare Variables 
    Scanner input = new Scanner(System.in); 
    String username; 
    String password; 
    String calculator = "calculator"; 
    String renameUser = "renameUser"; 
    String renamePass = "renamePass"; 
    String getIp = "getIp"; 
    String exit = "exit"; 
    String command; 

     // Prompt User to login 

     System.out.println("Username: "); 
     username = input.nextLine(); 
     System.out.println("Password: "); 
     password = input.nextLine(); 

      if (username.equals("admin") && password.equals("admin")) // Must use the equals method of string class to compare, == operator will NOT work. 
      { 
       System.out.println("Success! Welcome " + username + "!"); 
       while (true) // Infinite loop using the true statement 
       { command = input.nextLine(); 
        if (command.equals(calculator)) 
        { // calculator code here 
         if (command.equals(renameUser)) 
         { // renameUser code here 
          if (command.equals(renamePass)) 
          { // renamePass code here        
           if (command.equals(getIp)) 
           { // getIp code here 
            if(command.equals(exit)) 
            { 
            break; 
            } 
            System.out.println("Logging out!"); 
           }  
          }   
         }  
        }      
       } 
      } 
      else 
      { 
       System.out.println("Wrong username or password, please try again."); 
      } 
} 

}

+1

Tun Sie einen if/else insa d von verschachtelten ifs. Es ist eine falsche Logik. Verwenden Sie auch equalsIgnoreCase() für nicht-case-sensitive – Li357

+0

@AndrewL Ich verstehe nicht, ich verwende geschachtelte ifs, da jedes, wenn eine bestimmte Funktion hat ausgelöst –

+0

Verschachtelte ifs überprüfen, ob alle Bedingungen wahr sind. – Li357

Antwort

0

Dieser Ausschnitt ist hier die cyclomatic complexity Ihrer Software zu erhöhen macht es schwer, eine Entscheidung zu treffen, wenn man das später ändern möchten, können Sie mehr Chancen haben, den Code als Erfolg

zu brechen
if (command.equals(calculator)) 
        { // calculator code here 
         if (command.equals(renameUser)) 
         { // renameUser code here 
          if (command.equals(renamePass)) 
          { // renamePass code here        
           if (command.equals(getIp)) 
           { // getIp code here 
            if(command.equals(exit)) 
            { 

versuchen, etwas mehr wie eine Hexe Fall Logik

Beispiel zu entwerfen:

+0

Versuchen Sie, equalsIgnoreCase für eine bessere Flexibilität hinzuzufügen – Li357

+0

Vielen Dank, yeah Ich habe gerade festgestellt, dass ich dies nicht so programmiert habe, wie ich es vorhatte. :) –

+0

@AndrewL Wird tun :) –

1

Denken Sie über die unten Logik

if (command.equals(calculator)) 
{ // calculator code here 
    if (command.equals(renameUser)) 
    { 

Wenn command gleich calculator dann wie kann es gleich renameUser

Sie haben sollte

if (....) { 
} 
else if (...) { 
} 

Anweisung oder als switch-Anweisung

+0

Vielen Dank. –

Verwandte Themen