您能看看我的代码并告诉我为什么它不能按计划工作
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'
等吗?
答案 0 :(得分:1)
您card1
和card2
的当前状况
(card1 >= 2 && card1 <= 9 || card1 == 'T' || ...
对于号码卡不是正确的。 char
类型存储两字节Unicode值。要检查此值是否在字符2
和9
之间,您必须以与比较符号卡相同的方式来表示常量:
(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码。