首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中,如果3个值中只有2个值是1、2或3,我该如何打印?

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

Stack Overflow用户
提问于 2021-05-08 09:00:34
回答 3查看 69关注 0票数 0

这是一个玩牌概念的练习,所以它要求我在3张牌中只有2张是1、2或3的情况下打印“6”。这是我现在的代码,但如果我输入1、2和3,即使有超过2个值1、2或3,它仍然会返回“6”:

代码语言:javascript
复制
       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");
        }

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

EN

回答 3

Stack Overflow用户

发布于 2021-05-08 09:07:35

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

代码语言:javascript
复制
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)) {

你的意思是:

代码语言:javascript
复制
if ((card1 == 1 || card1 == 2 || card1 == 3) && (card2 == 1 ||card2 == 2 || card2 == 3) && card3 > 3) {

其次,对于这样的东西,最好使用计数器,以简化代码:

代码语言:javascript
复制
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");
}

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

代码语言:javascript
复制
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");
}
票数 3
EN

Stack Overflow用户

发布于 2021-05-08 09:23:13

你可以让集合库来做繁重的工作:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2021-05-08 10:05:55

这里有一种只使用条件句的方法。还有很多其他的方法。

  • 首先检查至少1张牌是否大于3。这是通过反转(!)完成的所有三张卡都小于或等于3的条件。
  • 然后检查剩余的卡中是否只有两张是<= 3

代码语言:javascript
复制
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");
    }
}

您也可以简单地流式传输这些卡并对其进行过滤。

  • 只让有价值的卡片通过过滤器。
  • 然后计算它们。
  • 如果有两张卡片,则打印六张

代码语言:javascript
复制
if (IntStream.of(card1,card2,card3).filter(card->card <= 3).count() == 2) {
            System.out.println("SIX");
}

有关条件句的更多帮助,建议您查看De Morgan's Laws

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67443155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档