gpt4 book ai didi

java - PriorityQueue.siftUpComparable?我在这里做错了什么?

转载 作者:行者123 更新时间:2023-11-30 08:51:48 24 4
gpt4 key购买 nike

请注意,我只有一个学期。问了一个类似的问题只是被重定向到 here ,老实说,我无法理解所说的大部分内容,这并不是一个巨大的帮助。

关于正在发生的事情,我使我的代码更加完整(我将所有内容合并到一个主要方法中。我认为这应该有点帮助。

无论如何我都会收到这个错误

Exception in thread "main" java.lang.ClassCastException: lab13d.Card cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:652)
at java.util.PriorityQueue.siftUp(PriorityQueue.java:647)
at java.util.PriorityQueue.offer(PriorityQueue.java:344)
at java.util.PriorityQueue.add(PriorityQueue.java:321)
at lab13d.Lab13d.main(Lab13d.java:53)
Java Result: 1

而且无法弄清楚它的正面或反面。我以前从未使用过队列,所以这对我来说真的很陌生。

这是我的代码:

public static void main(String[] args)
{


int players = 2;
Card[] pile;
int MAX_CARDS = 52;
int MAX_SUITS = 4;
int MAX_RANKS = 14;




pile = new Card[MAX_CARDS];
int index = 0;
for(int suit = 1; suit <= MAX_SUITS; suit++){
for(int rank = 2; rank <= MAX_RANKS; rank++, index++ ){
Card c = new Card(suit, rank);
pile[index] = c;

}
}


PriorityQueue<Card>[] hand = new PriorityQueue[players + 1];
for(int i = 0; i < players + 1; i++){
hand[i] = new PriorityQueue();
}


for(int i = 0; i < players; i++){
for(int j = i; j < pile.length; j+= players){
hand[i].add(pile[j]);
}
}
int leftOverCards = pile.length - (pile.length % players);
for(int i = leftOverCards; i < pile.length; i++){
hand[players].add(pile[i]);
}

System.out.printf("%s", hand[0]);

}

最佳答案

我假设以下行抛出 ClassCastException:

hand[i].add(pile[j]);

您正在尝试将 Card 的实例添加到 PriorityQueue,显然您的 Card 无法转换为可比较的。您需要转到您的 Card.java 文件并使该类实现 Comparable 接口(interface):

public class Card implements Comparable<Card>{
...
...
...

您还需要实现 compareTo 方法,我假设您的卡片将根据它们的值进行比较,并且 Card 对象的 int 属性值范围从 2(a two)到 13(a ace)。如果值相等,我们可以比较花色 - 我会把那部分留给你自己:

@Override
public int compareTo(Card o) {
int comparisonOutcome = ((Integer)o.getValue()).compareTo((Integer)this.getValue());
if(comparisonOutcome == 1 || comparisonOutcome == -1){
return comparisonOutcome;
else{
// here values are equal, we can compare by card suit
// return -1, 1 or 0
}

希望对你有帮助。

关于java - PriorityQueue.siftUpComparable?我在这里做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30418634/

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