gpt4 book ai didi

java - 如何在 ArrayList 中查找任何重复项的最大值

转载 作者:行者123 更新时间:2023-11-29 04:35:05 25 4
gpt4 key购买 nike

我目前正在编写使用 arrayLists 创建包含卡片对象的多手牌的类。我正在尝试编写一种方法来搜索数组列表(手)并返回最大的一对卡片。

这是我现在拥有的,但效率很低:

public int findPairRank() {
int one = 0, two = 0, three = 0, four = 0, five = 0, six = 0, seven = 0, eight = 0, nine = 0, ten = 0, eleven = 0, twelve = 0, thirteen = 0;

// loops through every card rank and adds +1 if it exists in the hand
for (int i = 0; i < cards.size(); i++) {
if (cards.get(i).getRank() == 1)
one++;
if (cards.get(i).getRank() == 2)
two++;
if (cards.get(i).getRank() == 3)
three++;
if (cards.get(i).getRank() == 4)
four++;
if (cards.get(i).getRank() == 5)
five++;
if (cards.get(i).getRank() == 6)
six++;
if (cards.get(i).getRank() == 7)
seven++;
if (cards.get(i).getRank() == 8)
eight++;
if (cards.get(i).getRank() == 9)
nine++;
if (cards.get(i).getRank() == 10)
ten++;
if (cards.get(i).getRank() == 11)
eleven++;
if (cards.get(i).getRank() == 12)
twelve++;
if (cards.get(i).getRank() == 13)
thirteen++;
}
ArrayList<Integer> list = new ArrayList<Integer>();
if (one == 2)
list.add(1);
if (two == 2)
list.add(2);
if (three == 2)
list.add(3);
if (four == 2)
list.add(4);
if (five == 2)
list.add(5);
if (six == 2)
list.add(6);
if (seven == 2)
list.add(7);
if (eight == 2)
list.add(8);
if (nine == 2)
list.add(9);
if (ten == 2)
list.add(10);
if (eleven == 2)
list.add(11);
if (twelve == 2)
list.add(12);
if (thirteen == 2)
list.add(13);

int max = 0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i) > max)
max = list.get(i);
}
if (max > 0)
return max;
else
return 0;
}

最佳答案

因为普通的卡牌游戏只有13种不同的卡牌排名,所以可以避免使用 map 。您只需要一个频率计数器来对 int[13](甚至 byte[13])临时数组进行排名。这是一个例子:

public int findPairRank() {
int[] freq = new int[13];
for (Card c: cards) { //assuming you use Card objects
freq[c.getRank()]++;
}

for (int i = 12; i >= 0; i--) {
if (freq[i] == 2) return i;
}
return -1; //no pair found
}

*请注意,通常情况下,2 号牌的排名最低(在我的示例中排名 = 0),而 A 最高(在我的示例中,A 的排名为 12)。您可以根据您的排名设计轻松更改以上内容。

关于java - 如何在 ArrayList 中查找任何重复项的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41944663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com