这是一个玩牌概念的练习,所以它要求我在3张牌中只有2张是1、2或3的情况下打印“6”。这是我现在的代码,但如果我输入1、2和3,即使有超过2个值1、2或3,它仍然会返回“6”:
if (card1 == 1 || card1 == 2 || card1 == 3 && card2 == 1 ||card2 == 2 || card2 == 3 && card3 > 3) {
System.out.println("SIX");
}
else if (card1 == 1 || card1 == 2 || card1 == 3 && card3 == 1 ||card3 == 2 || card3 == 3 && card2 > 3) {
System.out.println("SIX");
}
else if (card2 == 1 || card2 == 2 || card2 == 3 && card1 == 1 ||card1 == 2 || card1 == 3 && card3 > 3) {
System.out.println("SIX");
}
else if (card2 == 1 || card2 == 2 || card2 == 3 && card3 == 1 ||card3 == 2 || card3 == 3 && card1 > 3) {
System.out.println("SIX");
}
else if (card3 == 1 || card3 == 2 || card3 == 3 && card2 == 1 ||card2 == 2 || card2 == 3 && card1 > 3) {
System.out.println("SIX");
}
else if (card3 == 1 || card3 == 2 || card3 == 3 && card1 == 1 ||card1 == 2 || card1 == 3 && card2 > 3) {
System.out.println("SIX");
}刚开始接触编码,所以任何帮助都会很好。非常感谢!
发布于 2021-05-08 09:07:35
首先,您的条件是错误的,因为&&比||具有更高的优先级,这意味着以下两个语句是相同的:
if (card1 == 1 || card1 == 2 || card1 == 3 && card2 == 1 ||card2 == 2 || card2 == 3 && card3 > 3) {
if (card1 == 1 || card1 == 2 || (card1 == 3 && card2 == 1) ||card2 == 2 || (card2 == 3 && card3 > 3)) {你的意思是:
if ((card1 == 1 || card1 == 2 || card1 == 3) && (card2 == 1 ||card2 == 2 || card2 == 3) && card3 > 3) {其次,对于这样的东西,最好使用计数器,以简化代码:
int count = 0;
if (card1 == 1 || card1 == 2 || card1 == 3) {
count++;
}
if (card2 == 1 || card2 == 2 || card2 == 3) {
count++;
}
if (card3 == 1 || card3 == 2 || card3 == 3) {
count++;
}
if (count == 2) {
System.out.println("SIX");
}使用? :三元运算符,可以进一步简化:
int count = (card1 == 1 || card1 == 2 || card1 == 3 ? 1 : 0)
+ (card2 == 1 || card2 == 2 || card2 == 3 ? 1 : 0)
+ (card3 == 1 || card3 == 2 || card3 == 3 ? 1 : 0);
if (count == 2) {
System.out.println("SIX");
}发布于 2021-05-08 09:23:13
你可以让集合库来做繁重的工作:
List<Integer> list = new ArrayList<>();
list.add(card1);
list.add(card2);
list.add(card3);
list.removeIf(i -> i >= 1 && i <= 3);
if (list.size() == 1) {
System.out.println("SIX");
}发布于 2021-05-08 10:05:55
这里有一种只使用条件句的方法。还有很多其他的方法。
if (!(card1 <= 3 && card2 <= 3 && card3 <= 3)) {
// Now check that only two of the remaining cards are <= 3
if ((card1 > 3 && card2 <= 3 && card3 <= 3)
|| (card2 > 3 && card1 <= 3 && card3 <= 3)
|| (card3 > 3 && card1 <= 3 && card2 <= 3)) {
System.out.println("SIX");
}
}您也可以简单地流式传输这些卡并对其进行过滤。
if (IntStream.of(card1,card2,card3).filter(card->card <= 3).count() == 2) {
System.out.println("SIX");
}有关条件句的更多帮助,建议您查看De Morgan's Laws
https://stackoverflow.com/questions/67443155
复制相似问题