[英]In Java, how do I print something if only 2 out of 3 values are 1, 2 or 3?
This is for an exercise that plays with the idea of cards, so it asks me to print "SIX" if only 2 out of 3 cards are 1, 2 or 3. This is my code now but if I were to input, say, 1 2 and 3 it would still return "SIX" even though there are more than 2 values of 1 2 or 3:这是一个关于卡片概念的练习,所以如果 3 张卡片中只有 2 张是 1、2 或 3,它会要求我打印“SIX”。这是我现在的代码,但如果我要输入,比如说, 1 2 和 3 即使有超过 2 个 1 2 或 3 的值,它仍然会返回“SIX”:
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");
}
Just starting to get into coding so any help would be nice.刚开始进入编码,所以任何帮助都会很好。 Thank you very much!非常感谢!
First, your conditions are wrong, because &&
has higher precedence than ||
首先,您的条件是错误的,因为&&
的优先级高于||
, which means that the following two statements are the same: ,这意味着以下两个语句是相同的:
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)) {
What you meant was:你的意思是:
if ((card1 == 1 || card1 == 2 || card1 == 3) && (card2 == 1 ||card2 == 2 || card2 == 3) && card3 > 3) {
Second, for something like this, it's better to go with a counter, to simplify the code:其次,对于这样的事情,最好给go加上一个计数器,以简化代码:
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");
}
Using the ? :
使用? :
? :
ternary operator, that can be further simplified: ? :
三元运算符,可以进一步简化:
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");
}
You can let the collections library do the heavy lifting:您可以让 collections 库完成繁重的工作:
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");
}
Here is one way to do it using only conditionals.这是仅使用条件的一种方法。 There are many other ways too.还有很多其他的方法。
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");
}
}
You could also simply stream the cards and filter them.您也可以简单地 stream 卡并过滤它们。
<= 3
thru the filter.只让价值<= 3
的卡片通过过滤器。if (IntStream.of(card1,card2,card3).filter(card->card <= 3).count() == 2) {
System.out.println("SIX");
}
For more help on conditionals I recommend you check out De Morgan's Laws有关条件的更多帮助,我建议您查看德摩根定律
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.