如果陈述没有按计划措辞

时间:2018-11-16 19:31:51

标签: java

您能看看我的代码并告诉我为什么它不能按计划工作

Scanner sc = new Scanner(System.in);
char card1 = ' ';
char card2 = ' ';
int count = 0;
int globalCount = 0;
do {
    globalCount++;
    card1 = sc.next().charAt(0);
    card2 = sc.next().charAt(0);
    if ((card1 >= 2 && card1 <= 9 || card1 == 'T' || card1 == 'J' || card1 == 'Q' || card1 == 'K' || card1 == 'A') && (card2 >= 2 && card2 <= 9 || card2 == 'T' || card2 == 'J' || card2 == 'Q' || card2 == 'K' || card2 == 'A')){
        if (card1 == 'A' || card1 == 'K' && card2 == 'A' || card2 == 'K') {
            count++;
        }else {
            count = 0;
        }
    }else {
        System.out.println("Invalid cards given!");

    }
}while (count < 3);
System.out.println("Number of tries: " + globalCount);

如果我为card1输入一个数字,我总是会得到一个Invalid cards given,即使我认为我的if语句中也指定了它也可以接受一个数字?还有一点指针,好像我可以避免重复使用这些card1 == 'T'等吗?

2 个答案:

答案 0 :(得分:1)

card1card2的当前状况

(card1 >= 2 && card1 <= 9 || card1 == 'T' || ...

对于号码卡不是正确的。 char类型存储两字节Unicode值。要检查此值是否在字符29之间,您必须以与比较符号卡相同的方式来表示常量:

(card1 >= '2' && card1 <= '9' || card1 == 'T' ||  ...

通过将所有允许的值定义为String并使用String.indexOf(),可以避免重复代码。您的支票将转换为:

"23456789TJQKA".indexOf(char1) >= 0

答案 1 :(得分:0)

尝试一下:

Scanner sc = new Scanner(System.in);
char card1 = ' ';
char card2 = ' ';
int count = 0;
int globalCount = 0;
do {
    globalCount++;
    card1 = sc.nextLine().charAt(0);
    card2 = sc.nextLine().charAt(0);
    if (((card1 - '0' >= 2 && card1  - '0' <= 9) || card1 == 'T' || card1 == 'J' || card1 == 'Q' || card1 == 'K' || card1 == 'A') && ((card2 - '0' >= 2 && card2 - '0' <= 9) || card2 == 'T' || card2 == 'J' || card2 == 'Q' || card2 == 'K' || card2 == 'A')){
        if (card1 == 'A' || card1 == 'K' && card2 == 'A' || card2 == 'K') {
            count++;
        }else {
            count = 0;
        }
    }else {
        System.out.println("Invalid cards given!");

    }
}while (count < 3);
System.out.println("Number of tries: " + globalCount);

此比较

card1 >= 2

比较用2输入的字符的ASCII码,而不是card1的数字表示。
因此,要获得此数字表示形式,您必须减去'0'的ascii码。
通过减去card1-'0',可以得到输入的数字,而不是仅card1所得到的ASCII码,因为这实际上是一个char:0到255之间的ASCII码。