所以我有一个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。
我不确定为什么我的||在这种情况下,操作数不起作用。
答案 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
看起来这就是你想要使用的东西。