Java:如何循环遍历数组并检查它是否与变量值匹配?

Java:如何循环遍历数组并检查它是否与变量值匹配?,java,loops,scope,boolean,arguments,Java,Loops,Scope,Boolean,Arguments,我有一个char类型的参数。我想检查这个字符是否是小写,如果这是真的,那么我将使一个布尔变量等于真,否则,使它等于假。我创建了一个字符数组: 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

我有一个char类型的参数。我想检查这个字符是否是小写,如果这是真的,那么我将使一个布尔变量等于真,否则,使它等于假。我创建了一个字符数组:

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'};
然后我尝试了两种不同的解决方案,但每一种都超出了我的Acceptorgument boolean的范围

第一:

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

我理解为什么它不起作用,因为和acceptArgument布尔值相比,if语句的范围很广。但我不知道该怎么解决这个问题。请告知。

此操作不需要额外的阵列。通过将结果与Character.toLowerCase(char)等进行比较,可以检查
参数
是否为小写

char argument = argumentStr.charAt(0);
boolean acceptArgument = argument == Character.toLowerCase(argument);
boolean acceptArgument = Character.isLowerCase(argument);
(正如@jbnitet所指出的)使用
字符。isLowerCase(char)
类似

char argument = argumentStr.charAt(0);
boolean acceptArgument = argument == Character.toLowerCase(argument);
boolean acceptArgument = Character.isLowerCase(argument);
如果您还需要测试字符是否为字母,则可以添加and

boolean acceptArgument = Character.isLetter(argument) 
        && Character.isLowerCase(argument);
我理解为什么它不起作用,因为和acceptArgument布尔值相比,if语句的范围很广

不。原因不是范围,这是因为在每次迭代中,
acceptorgument
都会根据if条件获取
false
true
,直到它完成整个循环,因为您没有使用任何
break
或在找到匹配项时从循环中获取的内容

例如,如果
参数='p'
,它将在
字母class='p'
处找到匹配项,因此
接受参数
将设置为
。但是,循环前进到下一个字母
q
,因为
p!=q
验收参数
将设置为
false
,并继续这样操作。这就是为什么它没有达到你所期望的效果

请参见下面的更正

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

首先初始化

boolean acceptArgument=false;
第二步删除
否则
应该是这样

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

它可以工作。

添加
中断
after
acceptorgument=true不,这不是范围问题。使用您的调试器,或者在if和else中添加println()语句,您应该了解原因。为什么不直接调用isLowerCase()?@JBNizet或那样的语句呢严格地说,它不是等价的,“э”是小写,但不是在
a-z
@ElliottFrisch中。我还应该提到,我需要的参数只能是字母,不能是数字或特殊字符。在这种情况下我该怎么办?