Java: Как перебрать массив и проверить, соответствует ли он значению переменной? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть аргумент типа char.Я хочу проверить, что этот символ в нижнем регистре, если это правда, тогда я сделаю булеву переменную равной true, в противном случае сделаю ее равной false.Я создал массив символов:

String argumentStr = args[2];
char argument = argumentStr.charAt(0);
boolean acceptArgument;

char[] lowerCaseAlphabet = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
                            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};

Затем я попробовал два разных решения, но каждое выходит за рамки моего логического acceptArgument.

Первое:

for (int i = 0; i < 27; i++) {
        if (argument == lowerCaseAlphabet[i]) {
            acceptArgument = true;
        } else {
            acceptArgument = false;
        }
    }

Второе:

for (char letter: lowerCaseAlphabet) {
        if (argument == letter) {
            acceptArgument = true;
        } else {
            acceptArgument = false;
        }
    }

Я понимаю, почему это не сработает из-за объема операторов if по сравнению с логическим значением acceptArgument.Но я не знаю, как обойти это.Пожалуйста, сообщите.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Я понимаю, почему это не сработает из-за объема операторов if по сравнению с логическим значением acceptArgument

Нет.причина не в объеме, а в том, что на каждой итерации acceptArgument получает либо false, либо true в зависимости от условия if до завершения всего цикла, потому что вы не использовали break или что-либо еще, чтобы получитьвне цикла, когда совпадение найдено.

Например, если argument = 'p', он найдет совпадение в letter='p', и поэтому acceptArgument будет установлен в true.Однако цикл переходит на следующую букву q, поскольку p != q, acceptArgument будет установлен на false и будет продолжаться в том же духе.именно поэтому он не работает так, как вы ожидаете.

см. приведенное ниже исправление

для исправления вашего кода, внесите следующую модификацию

Первая инициализация;

boolean acceptArgument=false;

Второе удаление else должно быть так

for (char letter: lowerCaseAlphabet) {
    if (argument == letter) 
        acceptArgument = true;          
}

работает.

0 голосов
/ 19 сентября 2018

Вам не нужен дополнительный массив для этого.Вы можете проверить, является ли argument нижним регистром, сравнив результат с Character.toLowerCase(char) как

char argument = argumentStr.charAt(0);
boolean acceptArgument = argument == Character.toLowerCase(argument);

или (как указано @JBNizet), используйте Character.isLowerCase(char) как

boolean acceptArgument = Character.isLowerCase(argument);

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

boolean acceptArgument = Character.isLetter(argument) 
        && Character.isLowerCase(argument);
...