如果Statement不与OR运算符一起使用

时间:2014-11-12 00:04:05

标签: java if-statement

所以我有一个Shuffle方法,可以洗牌。每张卡都有一个处理字段,根据是否已经处理,它将是真/假。

shuffle方法将每个牌处理字段设置为false。我试图阻止它将某些卡设置为假,具体取决于该卡当前是否在经销商/玩家手中。

public void shuffle(){
    Collections.shuffle(deck);//Shuffles the deck
    for(Card card : deck){//For each card in the deck
        if(!Game.playersHand.contains(card) || !Game.dealersHand.contains(card)){//If card is not in dealers/players hand
            card.setDealt(false);//card is no longer dealt
        }//end if
    }//end for
}//end shuffle

以上if语句不起作用。无论如何,它都会将每张卡标记为假。

如果我这样做:

public void shuffle(){
    Collections.shuffle(deck);
    for(Card card : deck){
        if(!Game.playersHand.contains(card)){
            card.setDealt(false);
        }
    }
}//end shuffle

它会阻止playerHand中卡片的处理字段被设置为false。

我不确定为什么我的||在这种情况下,操作数不起作用。

3 个答案:

答案 0 :(得分:1)

||运算符工作正常,可能是你误解了它

boolean x= !true || !false; 
System.out.println(x); // prints true

显然&&是你在找什么

boolean x= !true && !false; 
System.out.println(x); // prints false

所以在你的情况下,这将是

if(!Game.playersHand.contains(card) && !Game.dealersHand.contains(card)){
  ...
}

如果你否定整个表达方式会更容易

if(!(Game.playersHand.contains(card) || Game.dealersHand.contains(card))){
  ...
}

答案 1 :(得分:0)

工作正常;但这不是你想要的表达方式。

假设牌位于玩家的手中;据推测,它也不在经销商手中。反之亦然。那就是:每张卡都不在某些手中。

根据你的评论,听起来你想要一个&&):卡片应该在播放器 >也不是经销商的手。

答案 2 :(得分:0)

根据De Morgan的法律,(!Game.playersHand.contains(card)||!Game.dealersHand.contains(card))相当于!(游戏.playersHand.contains(card)&& Game.dealersHand.contains(card))

当两个元素都为真时,这个(如下所示)的真值表是假的;在这样的互斥案例中,这意味着它总是评估为真。

真相表:(!Game.playersHand.contains(card)||!Game.dealersHand.contains(card))是:

一个...乙...!甲...!乙...(!甲||!B)
˚F... F ....牛逼....牛逼......牛逼
F的牛逼....牛逼....˚F......牛逼
牛逼... F ....˚F....牛逼......牛逼
的...Ť.... ....˚F......˚F˚F

真相表!(Game.playersHand.contains(card)|| Game.dealersHand.contains(card))是:

一个...乙...(A || B)...!(A || B)
˚F... F ......˚F........牛逼
F的牛逼......牛逼........˚F
牛逼... F ......牛逼........˚F
的...Ť......Ť........˚F

看起来这就是你想要使用的东西。