我正在编写一个主要方法的UnoPlayer.java代码,该方法已经写出来测试我们的UnoPlayer方法的合法性。
我正在检查手中的一种颜色(数据类型)的数量是否大于其他颜色的数量。
手是列表类型!!
所以,对于Color.BLUE,我有这个:
if (hand.contains(Color.BLUE > Color.RED && Color.GREEN && Color.YELLOW)) {
colorReturned = Color.BLUE;
}
我知道这不起作用,因为我的Color数据类型不适用于二进制操作数,因为它们不是整数。我将如何编写代码以便
// if(hand包含比其余颜色更多的Color.BLUE){
//返回Color.BLUE}
这是卡片实施:
private UnoPlayer.Color color;
private UnoPlayer.Rank rank;
private int number;
public Card(UnoPlayer.Color color, UnoPlayer.Rank rank) {
this.color = color;
this.rank = rank;
this.number = -1;
}
public Card(UnoPlayer.Color color, int number) {
this.color = color;
this.rank = UnoPlayer.Rank.NUMBER;
this.number = number;
}
public Card(UnoPlayer.Color color, UnoPlayer.Rank rank, int number) {
this.color = color;
this.rank = rank;
this.number = number;
}
答案 0 :(得分:0)
假设hand是一张牌列表,其中每张牌都有一种颜色(如Uno游戏中),你可能想要写一个循环,跟踪每种颜色的次数。然后返回最大计数的那个。
List<Card> hand;
Map<Color, Integer> colorCount = new HashMap<>();
for (Card card : hand) {
int currentCount = colorCount.get(card.getColor()) == null ? 0 : colorCount.get(card.getColor());
colorCount.put(card.getColor(), currentCount + 1);
}
在Java 8中:
List<Card> hand;
Map<Color, Integer> colorCount = new HashMap<>();
list.forEach(card -> colorCount.put(card.getColor(), 1 + colorCount.getOrDefault(card.getColor(), 0)));
并查看此SO answer以获取地图上最大数量的颜色。
答案 1 :(得分:0)
问题是你没有正确使用contains
,根据Java docs,方法contains
会返回一个布尔变量(true
或false
取决于列表中是否存在值)。但是,当contains
将Object
作为参数时,您输入的是布尔表达式。
我建议检查某个数据类型是否出现在列表中最多,我首先对列表进行排序,然后保持最高发生数据类型的计数,如下所示,
Collections.sort(hand);
int prev = hand.get(0);
int occursMost = hand.get(0);
int count = 1;
int maxCount = 1;
for (int i = 1; i < hand.length; i++) {
if (a.get(i) == prev)
count++;
else {
if (count > maxCount) {
popular = a.get(i-1);
maxCount = count;
}
prev = hand.get(i);
count = 1;
}
}
if(occursMost == Color.BLUE) {
colorReturned = Color.BLUE;
}
一点点如何运作,所以让我们说你的手看起来像这样
GREEN, BLUE, RED, GREEN, BLUE, BLUE
我不太确定颜色背后的int值,但在排序后,手可能看起来像这样,
GREEN, GREEN, RED, BLUE, BLUE, BLUE
循环将从绿色开始,然后继续递增count
,直到找到不同的颜色。找到不同的颜色后,会使用count
检查maxCount
,看看到目前为止是否找到了最流行的颜色。然后它重置count
并开始计算列表中下一个颜色的出现次数。在循环结束时,应设置列表中最常用的颜色。