所以我有一个洗牌方法,可以洗牌。每张牌都有一个已发字段,根据是否已发,该字段将为真/假。
洗牌方法将每个发牌区域设置为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
它将防止玩家手中的牌的发牌区域被设置为假。
我不知道为什么我的||操作数在这种情况下不起作用。
||
运算符工作正常,可能是您误解了它
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))){
...
}
运行良好;但这不是你想要的表达方式。
假设卡片在玩家手中;大概它也不在经销商手中。反之亦然。也就是说:每一张牌都不在某个手中。
从你的评论中,听起来你想要一张和(&&
):这张牌既不应该在玩家的手中,也不应该在发牌人的手中。
根据德摩根定律,(!Game.playersHand.contents(card)||!游戏.经销商手.包含(卡)相当于!(Game.playersHand.包含(卡)&;游戏.经销商手.包含(卡)).
只有当这两个元素都为真时,这个的真值表(如下所示)才为假;在这样一个互斥的情况下,这意味着它总是计算为true。
以下项的真值表:(!Game.playersHand.contents(card)||!游戏.经销商手.包含(卡))是:
A。。。BA.B.…(!A||!B)
F.…F.…T.…T…T
F…T…T…F…T
T…F…F…T…T
T…T…F…F…
真相表!(Game.playersHand.contents(卡)|| Game.dellersHand.contens(卡))是:
A。。。B…(A||B)。。。!(A||B)
F…F……F…..T
F…T…T……F
T…F…T……F
T…T……T…..F
看起来这就是你想要使用的。