if语句不遵守规则

时间:2018-06-17 20:59:49

标签: java if-statement

以下代码应该告诉用户他的输入是元音还是辅音或小于1的数字。然而程序返回" Vowel"包括辅音在内的所有大写字母以及每当输入数字时#34;辅音"退回。例如 - 如果输入a,则结果=元音。如果b,结果=辅音。如果B,结果= Vowel(应该是辅音)。如果为1,则结果=辅音(应为数字)。任何建议将不胜感激。感谢。

package checkVowelorConstantorNumber;
import java.util.Scanner;
public class Main {
public static void main (String [] args) {
    Scanner inp = new Scanner (System.in);
    boolean tf = false;


    while(tf == false) {
    System.out.println("Enter a character which is a - z or A - Z or 
    less than 1");
    char cha = inp.next().charAt(0);
    inp.nextLine();

    if(Character.isLetter(cha) && cha == 'a'||cha == 'e' || cha == 'i' || cha == 'o' || cha == 'u' || Character.isUpperCase(cha)) {
     System.out.println("Vowel");
    }
    else if(Character.isLetter(cha) && cha != 'a'|| cha != 'e' || cha != 'i' || cha != 'o' || cha != 'u' || Character.isUpperCase(cha)) {
     System.out.println("Consonant");
    }

    else if(Character.isDigit(cha) && cha <= 1 ) {
     System.out.println("Digit");
    }
    else  System.out.println("Invalid character");
    }
 }
}

2 个答案:

答案 0 :(得分:0)

你的if语句首先检查给定字符是否是字母而不是a,1既不是假的,那么它检查1是否不等于&#39; e&#39;导致该陈述为真,从而印刷了辅音&#39;您必须为每次比较检查isLetter。因此我建议这样的事情:

if(Character.isLetter(cha)) {
   // Check for vowel or consonant based on letters
} else if(Character.isDigit(cha) && cha <= '1') {
   System.out.println("Digit");
} else {
   System.out.println("Invalid character");
}

你也应该使用辅音使用&&而不是||制作if语句,因为它不应该是指定的字符。

答案 1 :(得分:0)

密切关注逻辑ands(&&),逻辑ors(||)和括号。请考虑以下内容,从代码中修改一些注释。

char cha = inp.next().charAt(0);
inp.nextLine();

if (cha.isLetter()) {
    // convert to uppercase to simplify the if
    char uc = cha.toUpperCase();
    if (uc == 'A' || uc == 'E' || uc == 'I' || uc == 'O' || uc == 'U') {
        // it's a vowel
    } else {
        // it's a letter that isn't a vowel (consonant)
    }
} else {
    // it's not a letter
    if (cha.isDigit() && cha < '1') {
        // but it is a digit less than 1
    } else {
        // it's something else (digit not less than '1' or not a digit)
    }
}