Использование логического значения для печати недопустимых команд в Java - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь создать свой собственный интерфейс командной строки.

Самым запутанным является вывод неверной базы команд на ввод пользователя.

Я пытался использовать булеву функцию для проверки правильности каждой команды.

Я хочу, чтобы моя программа продолжалась, даже если моя команда недействительна.

Как мне снова войти в цикл while после того, как я вышел из него?

String command;
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
boolean R = true;

while (R==true) {
    System.out.print("Command: ");
    command = console.readLine();

    R = false;

    ArrayList commandParams = new ArrayList();
    String[] commandSplit = command.split(" ");

    if (commandSplit.length > 1) {
        for (int i = 1; i < commandSplit.length; i++) {
            commandParams.add(commandSplit[i]);
        }
    }

    if (commandSplit[0].equals("time")) {
        Date time = new Date();

        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss ");
        System.out.println(sdf.format(time));
        R = true;
    }

    // Print today's date.
    if (commandSplit[0].equals("date")) {
        Date date = new Date();

        SimpleDateFormat sdf = new SimpleDateFormat(" YYYY/MM/DD");
        System.out.println(sdf.format(date));
        R = true;
    }

    // Exit the console when "exit" is entered.
    if (commandSplit[0].equals("exit")) {
        System.exit(0);
        R = true;
    }
}
System.out.println("Invalid command");

System.out.print("Command: ");
command = console.readLine();

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Вы можете сделать что-то вроде этого. Вам даже не нужна логическая переменная.

while (true) {
    String command = console.readLine();
    if (command.equals("date")) {
        //print date
        continue;
    }
    if (command.equals("time")) {
        //print time
        continue;
    }
    if (command.equals("exit")) {
        break;
    }
    System.out.println("invalid command");        
    command = console.readLine();
}
0 голосов
/ 09 мая 2018

Конкретный ответ: Вы не можете вернуться к нему.

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

Вы можете использовать множество операторов if-else, но, начиная с JDK 7, мы наконец-то можем сравнивать строки в структуре switch-case, которая бы идеально соответствовала вашим потребностям:

boolean loop = true;
while ( loop )
{
  // Your read and parse functions go here...
  switch ( commandSplit[ 0 ] )
  {
    case "exit":
      loop = false;
      break;
    case "time":
      // dummy method
      printTime();
      break;
    // default will be executed if none of the above cases is met.
    default:
      System.out.println( "Invalid / Unknown command." );
      break;

  }
}
// shutdown logic goes here (if needed).

Это позволит вам легко расширить функциональность вашей программы, поскольку вы легко можете добавить новый случай, если хотите реализовать новую команду.

0 голосов
/ 09 мая 2018

Переместить код недопустимой команды в цикл, т. Е.

while (R==true) {


        System.out.print("command: ");


        command = console.readLine();
        R=false;

       ...

        //Exit the console when "exit" is entered.
        if (commandSplit[0].equals("exit")) {
            System.exit(0);
            R=true;
        }

        if(R==false){
            System.out.println("invalid command");
            R=true;
        }       
    }              
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...