2015-12-20 4 views
0

Я пытаюсь выполнить программу после ввода пользователя с консоли. [код ниже]. Тем не менее, я не хочу завершать работу после завершения выполнения программы. Я хочу, чтобы консоль всегда запрашивала у меня INITIAL_MESSAGE после завершения выполнения. Фактически, после выполнения программы, я хочу, чтобы консоль снова спросила меня INTIAL_MESSAGE, чтобы я мог снова ввести входы, как я хочу, и выполнить программу еще раз. Я на самом деле вызываю в этом методе метод взаимодействия(), от основного метода в качестве отправной точки. Скажите, пожалуйста, как я могу добиться этогоКак продолжать запрашивать ввод в консоль даже после выполнения программы

public class ConsoleInteraction { 

    /** 
    * @param args 
    */ 

    public static int numberOfJavaTrainees ; 
    public static int numberOfPHPTrainees ; 
    Barracks trainingBarrack = new Barracks(); 


    public void interactor() throws IOException { 

     //reading capability from the consolemessages properties file 

     ResourceBundle bundle = ResourceBundle.getBundle("resources/consolemessages"); 

     // Create a scanner so we can read the command-line input 
     Scanner scanner = new Scanner(System.in); 

     // Prompt for training or viewing camp  
     System.out.print(bundle.getString("INITIAL_MESSAGE")); 
     //Get the preference as an integer 
     int preference = scanner.nextInt(); 


     //Show options based on preference 
     if(preference == 1) 
     { 
      //System.out.println("Whom do you want to train?\n 1.Java Guy \n 2.PHP Guy \n 3.Mix \n Enter You preference:"); 
      System.out.print(bundle.getString("WHO_TO_TRAIN")); 
      int traineepreference = scanner.nextInt(); 
      if (traineepreference == 1) 
       { 
       //System.out.println("How many Java guys you want to train ? : "); 
       System.out.print(bundle.getString("HOW_MANY_JAVA")); 
       numberOfJavaTrainees = scanner.nextInt(); 
       trainingBarrack.trainTrainees(numberOfJavaTrainees, 0); 

       } 
      else if (traineepreference == 2) 
       { 
       //System.out.println("How many PHP guys you want to train ? : "); 
       System.out.print(bundle.getString("HOW_MANY_PHP")); 
       numberOfPHPTrainees = scanner.nextInt(); 
       trainingBarrack.trainTrainees(0, numberOfPHPTrainees); 

       } 
      else if (traineepreference == 3) 
       { 
       System.out.print(bundle.getString("HOW_MANY_JAVA")); 
       numberOfJavaTrainees = scanner.nextInt(); 
       System.out.print(bundle.getString("HOW_MANY_PHP")); 
       numberOfPHPTrainees = scanner.nextInt(); 
       trainingBarrack.trainTrainees(numberOfJavaTrainees, numberOfPHPTrainees); 

       } 
      else 
       { 
        System.out.print(bundle.getString("ERROR_MESSAGE1")); 
       } 
     } 
     else if (preference == 2) 
     { 
      System.out.println("Showing Camp to You"); 
      System.out.println("Java trained in Trainee Camp : "+ TraineeCamp.trainedJavaGuys); 
      System.out.println("PHP trained in Trainee Camp : "+ TraineeCamp.trainedPHPGuys); 

     } 

     else 
     { 
       System.out.print(bundle.getString("ERROR_MESSAGE2")); 
     } 

     scanner.close(); 
    } 
} 
+0

Добавить петлю вокруг вашего звонка ... ?! – Jan

+0

A для цикла вокруг вызова из основного метода? Как долго я должен продолжать разговор? – DeepJVM

+0

Зависит от того, что вы хотите сделать ... вы можете взаимодействовать с возвратом boolean и сделать это условие цикла. И если исходное сообщениеbid «quit» возвращает false? – Jan

ответ

1

Рассмотрим эти изменения быстро, составленные в классе. Может не компилироваться. Не может работать так, как вы планировали.

Некоторые основные моменты того, что я думаю, вы должны изменить:

  • Используйте константы для значений выбора. Делает ваш код более удобным для чтения.
  • Инициализировать комплект и сканер вне метода. Возможно повторное использование.
  • вместо кодирования длинных частей коды внутри КРП-то еще, если методы каскадного, вызов там - angain увеличивая вашей читаемость длинного пути

    public class ConsoleInteraction { 
    
        public static int numberOfJavaTrainees ; 
        public static int numberOfPHPTrainees ; 
    
        //Don't read that every time... 
        ResourceBundle bundle = ResourceBundle.getBundle("resources/consolemessages"); 
    
    
        public static void main(String[] args) { 
        //Moving Scanner out of loop 
        try { 
         Scanner scanner = new Scanner(System.in); 
         ConsoleInteraction ci = new ConsoleInteraction(); 
         //Loop until this returns false 
         while(ci.interactor(scanner)) { 
          System.out.println("=== Next iteration ==="); 
         } 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
    
    } 
    
    //Constant values to make code readable 
    public final static int PREF_TRAINING = 1; 
    public final static int PREF_SHOW_CAMP = 2; 
    public final static int PREF_QUIT = 99; 
    
    public boolean interactor(Scanner scanner) throws IOException { 
    
        // Prompt for training or viewing camp  
        System.out.print(bundle.getString("INITIAL_MESSAGE")); 
        //Get the preference as an integer 
        int preference = scanner.nextInt(); 
    
        //Show options based on preference. 
    
        if(preference == PREF_TRAINING) { 
         //LIKE YOU DID BEFORE OR calling method: 
         readTraining(scanner); 
        } else if (preference == PREF_SHOW_CAMP) { 
         //LIKE YOU DID BEFORE OR calling mathod: 
         showCamp(); 
        } else if (preference == PREF_QUIT) { 
         //Last loop 
         return false; 
        } else { 
         System.out.print(bundle.getString("ERROR_MESSAGE2")); 
        } 
        //Next loop 
        return true; 
    } 
    } 
    
+0

Awesome. Спасибо Ян за входные данные. Я получил здесь дрейф. Спасибо за ваши старания – DeepJVM

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