繁体   English   中英

在 Java 中,如果 3 个值中只有 2 个是 1、2 或 3,我该如何打印?

[英]In Java, how do I print something if only 2 out of 3 values are 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");
        }

刚开始进入编码,所以任何帮助都会很好。 非常感谢!

首先,您的条件是错误的,因为&&的优先级高于|| ,这意味着以下两个语句是相同的:

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) {

其次,对于这样的事情,最好给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");
}

使用? : ? :三元运算符,可以进一步简化:

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");
}

您可以让 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");
}

这是仅使用条件的一种方法。 还有很多其他的方法。

  • 首先检查至少 1 张牌大于 3。如果所有 3 张牌都小于或等于 3,则通过反转 (.) 条件来完成此操作。
  • 然后检查剩下的卡片中只有两张 <= 3
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");
    }
}

您也可以简单地 stream 卡并过滤它们。

  • 只让价值<= 3的卡片通过过滤器。
  • 然后数一数。
  • 如果有两张牌,打印 SIX
if (IntStream.of(card1,card2,card3).filter(card->card <= 3).count() == 2) {
            System.out.println("SIX");
}

有关条件的更多帮助,我建议您查看德摩根定律

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM