2016-06-08 3 views
0

Я пытаюсь сделать так, чтобы, если имя пользователя и/или пароль неверны, программа запустит его снова, вместо того, чтобы просто выполнять команду print в инструкции else. Я попробовал поместить другой цикл while в инструкцию else и вставить инструкцию if внутри, которая проверяет имя пользователя и пароль внутри нее, но потом я понял, что мне придется скопировать весь код из инструкции if в оператор else, что, очевидно, кажется как будто это не правильное решение и, вероятно, очень неуклюже. Каков правильный способ вернуть программу с самого начала или что-то еще?Перезапуск моей программы в Java

// 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

Выполнение if/else instea d вложенных ifs. Это неправильная логика. Кроме того, используйте equalsIgnoreCase() для нечувствительного к регистру – Li357

+0

@AndrewL. Я не понимаю, я использую вложенные ifs, потому что каждый из них имеет определенную функцию, если она вызвана. –

+0

Вложенные ifs проверяют, являются ли ВСЕ условия истинными. – Li357

ответ

0

Этот фрагмент кода здесь увеличивает cyclomatic complexity вашего программного обеспечения, что делает его трудно принять решение, если вы хотите изменить это позже, у вас больше шансов сломать код, чем успех

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)) 
            { 

попытка создать нечто большее, как ведьма случае логики

Пример:

switch (userInput) { 
    case renameUser: 
     renameUser(); 
     break; 
    case getIp: 
     getIp(); 
     break; 
    ... 

    default: 
     break; 
    } 
+0

Попробуйте добавить equalsIgnoreCase для лучшей гибкости – Li357

+0

Большое спасибо, да, я только что понял, что я закодировал это не так, как планировал. :) –

+0

@AndrewL Will сделаю :) –

1

Подумайте о следующей логике

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

Если command равен calculator то, как она может равна renameUser

Вы должны иметь это

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

заявление или в качестве переключателя заявление

+0

спасибо. –

Смежные вопросы