создание консоли оболочки для приема различных входных данных

#java

#java

Вопрос:

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

 import java.text.SimpleDateFormat;
import java.util.*;

public class Main {
  public static void main(String[] args) {
    while (true) {
      Scanner myObj = new Scanner(System.in); // Create a Scanner object
      System.out.println("");
      String output = getCommand(myObj);
      System.out.println(output);
    }
  }

  private static String getCommand(Scanner myObj) {
    List help = new ArrayList();
    help.add("print");
    if (myObj.nextLine().equals("print")) {
      return "Hello World";
    } else if (myObj.nextLine().equals("time")) {
      return new SimpleDateFormat("hh:mm a").toString();
    } else if (myObj.nextLine().equals("exit")) {
      // exit the console
    }
    return Arrays.asList(help).toString();
  }
}
  

Комментарии:

1. Подсказка: создайте свой сканер перед запуском цикла в main. В противном случае вы просто создаете много сканеров и в конечном итоге можете вызвать проблемы с памятью, если используете программу достаточно долго (хотя это может занять время жизни).

Ответ №1:

Вот один из способов. Верните null , если пользователь вводит exit , а затем проверьте это в main и выполните a break для выхода из основного цикла:

 public class Test {
    public static void main(String[] args) {
        while(true) {
            Scanner myObj = new Scanner(System.in);  // Create a Scanner object
            System.out.println("");
            String output = getCommand(myObj);
            if (output == null)
                break;
            System.out.println(output);
        }
    }

    private static String getCommand(Scanner myObj) {
        List help  = new ArrayList();
        help.add("print");
        if(myObj.nextLine().equals("print")){
            return "Hello World";
        }else if(myObj.nextLine().equals("time")){
            return new SimpleDateFormat("hh:mm a").toString();
        }else if(myObj.nextLine().equals("exit")){
            return null;
        }
        return Arrays.asList(help).toString() ;
    }
}
  

Другим способом было бы просто вызвать:

 System.exit(0); (instead of doing `return null;`)
  

как только ваш тест exit завершится успешно.