导致布尔方法的多个'或'语句始终返回true。为什么?

时间:2018-02-08 04:23:06

标签: java

    import java.util.*;

    public class help {

        public static void main(String[] args) {
            System.out.print(isAllVowels("ugh".toLowerCase()));
        }

        public static boolean isAllVowels(String Str) {
            if( Str.length() == 0) {
                return true;
            }
            int b = Str.length();
            for( int a=0; a<b; a++) {
                char c = Str.charAt(a);
                if(c!='a' || c!='e' || c !='i' || c!='o' || c!='u') {
                    return true;
                }
            }
            return false;
        }
    }

您好,我是java的新手,返回true的char比较元素总是如此。我想知道它为什么总是如此? Additinally IntelliJ告诉我a总是小于b。为什么会这样? 感谢。

3 个答案:

答案 0 :(得分:6)

问题不在于您使用了大量or语句。

你混淆了andor的含义。 and是独占的,如果两个条件都满足则返回true。 or是包容性的,如果满足任一条件,则返回true。

想想这样:让我们说你需要买一双新鞋,但你很挑剔。鞋子必须是蓝色and绒面革。一对蓝色查克泰勒全明星满足第一个条件,但不是第二个条件。你会买Chucks吗?假。有人抢走格雷斯兰并抢走了一双埃尔维斯普雷斯利的鞋子并将它们提供给你。这双鞋是蓝色and绒面革。你会买吗?真。

如果你是一个不那么挑剔的人,你会穿蓝色鞋or绒面革鞋。蓝色Chucks,棕色绒面革乐福鞋,棕褐色绒面革拖鞋或蓝色拖鞋都符合两个标准之一,因此将是真实的。

您的代码用简单的英语询问“如果字符不是aeiou,则返回true “。即使u是元音,u也不是a,不是e,不是i而不是o,所以它返回true。

使用一堆or只意味着如果其中任何一个条件成立,则返回true。

答案 1 :(得分:0)

程序正在按预期运行 条件 if(c!='a' || c!='e' || c !='i' || c!='o' || c!='u')将根据您的输入返回true。

答案 2 :(得分:0)

如果你希望代码在字符串中的所有字符都返回true 是元音,如果任何一个字符是无元音,则为假,  检查以下代码。

public class help
    {
        public static void main(String[] args)
        {
            System.out.print(isAllVowels("aseiou".toLowerCase()));
        }
        public static boolean isAllVowels(String Str)
        {
        if( Str.length() == 0)
        {
            return true;
        }
        for( int a=0; a<Str.length(); a++)
        {
            char c = Str.charAt(a);
            if(c=='a' || c=='e' || c =='i' || c=='o' || c=='u')
            {
                continue;
            }
            else  return false;

        }
        return true;
    }
}