Обеспечение правильного ввода в Java - PullRequest
0 голосов
/ 20 сентября 2010

У меня есть класс, который я написал на Java, и один из методов - getCommand () Цель этого метода - прочитать строку и посмотреть, что введенный пользователем соответствует любой из допустимых команд.

Вот как я написал это изначально:

public char getCommand(){


    System.out.println("Input command: ");
     command = input.nextLine();

    while(command.length() != 1){
        System.out.println("Please re-enter input as one character: ");
        command = input.nextLine();
    }

    while(  command.substring(0) != "e" ||
            command.substring(0) != "c" || 
            command.substring(0) != "s" ||
            command.substring(0) != "r" ||
            command.substring(0) != "l" ||
            command.substring(0) != "u" ||
            command.substring(0) != "d" ||
            command.substring(0) != "k" ||
            command.substring(0) != "f" ||
            command.substring(0) != "t" ||
            command.substring(0) != "p" ||
            command.substring(0) != "m" ||
            command.substring(0) != "q"){
        System.out.println("Please enter a valid character: ");
        command = input.nextLine();
    }

    fCommand = command.charAt(0);

    return fCommand;

}

Теперь я вижу, что проблема в том, что, поскольку я использую оператор OR, он не выйдет из этого цикла, потому что вводимый символ не всегда будет равен одному из них. Я попытался изменить его на оператор AND, но та же проблема. Что было бы лучшим способом принять только эти конкретные символы? Очень ценится.

Ответы [ 2 ]

2 голосов
/ 20 сентября 2010

Ваша логика неверна.Вы должны использовать логические AND, а не OR.Также я считаю, что вы хотите использовать charAt() вместо substring(), а затем сравнивать символы.

т.е.

while(  command.charAt(0) != 'e' &&
        command.charAt(0) != 'c' && 
        command.charAt(0) != 's' &&
        ...)

В противном случае, если вы хотите проверить наличие фактических односимвольных строк,просто проверьте, используя равенство строк.

while(  !command.equals("e") &&
        !command.equals("c") &&
        !command.equals("s") &&
        ...)
0 голосов
/ 20 сентября 2010

Вы должны определить свои команды как константы (индивидуально). Такие жесткие значения кодирования затрудняют обновление вашего кода в будущем.

Если программа является просто доказательством концепции или домашней работы, я бы использовал:

private static final String COMMANDS = "ecsrludkftpmq";

while(!COMMANDS.contains(command.getChar(0)) {
  System.out.println("Please enter a valid character: ");
  command = input.nextLine();
}

В противном случае, если это производственный код, я бы рассмотрел создание простого класса Command (char) и предоставление отдельных констант команд как части коллекции (возможно, Map против ключа Character), который можно протестировать, чтобы увидеть, содержит ли соответствующая команда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...