我有一个char类型的参数。我要检查此char是否为小写,如果为true,则使布尔变量等于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布尔值相比。但是我不知道该如何解决。请指教。

最佳答案

我知道为什么它不起作用,因为if语句的范围与acceptArgument布尔值相比


不,原因不在范围内,这是因为每次迭代acceptArgument都会根据if条件获取falsetrue直到完成整个循环,因为您没有使用任何break或其他找到匹配项时退出循环。

例如,如果argument = 'p',它将在letter='p'处找到匹配项,因此acceptArgument将被设置为true。但是,循环前进到下一个字母q,因为p != qacceptArgument将设置为false并继续这样。这就是为什么它没有按预期工作的原因。

请参阅下面的更正

要更正您的代码,请进行以下修改

首先初始化;

boolean acceptArgument=false;


第二删除else应该是这样的

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


有用。

07-24 09:16