我需要编写代码,让用户可以比较 2 手牌,找出总体上最有值(value)的牌。我有一个 Card 对象的类,每个对象都有一个值,然后是 Hand 对象的类,将许多卡片存储为 ArrayList。
结果需要用下面的代码来回答:int comparison = hand1.compareTo(hand2);所以我解决这个问题的代码需要在 Hand 类的 compareTo 方法中。
我已经开始执行 for-each 循环,但它似乎无法将此处的“鼠标”识别为 ArrayList
import java.util.ArrayList;
import java.util.Collections;
public class Hand implements Comparable<Hand> {
private ArrayList<Card> hand = new ArrayList<Card>();
public Hand(ArrayList hand) {
}
public void add(Card card) {
hand.add(card);
}
public void print(){
for (Card mouse : hand){
System.out.println(mouse.toString());
}
}
public void sort(){
Collections.sort(hand);
}
public int compareTo(Hand mouse){
int x = 0;
int y = 0;
for (Card moose : hand){
x = x + moose.getValue();
}
for (Card house : mouse){ // <<<<<<<< ERROR
y = y + house.getValue();
}
if (x > y){
return 1;
}
return 0;
}
}
我收到一条错误消息,指出鼠标不是数组。但如果它是一个“手”,那么它肯定是一个数组?我知道我在这里做了一些愚蠢的事情,但我不知道那是什么。
最佳答案
Hand
不是数组或 Iterable
.增强的 for 循环只能迭代那些有某种概念的东西是“你可以迭代的东西”。
事实上有一个 List<Card>
在类中是无关紧要的——你必须告诉 Java 如何迭代你的类的一个实例,因为你可能不希望它迭代那个列表;或者可能有很多列表,所以没有一个可供选择。
让它实现Iterable<Card>
:
public class Hand implements Comparable<Hand>, Iterable<Card> {
// ...
@Override public Iterator<Card> iterator() {
return hand.iterator();
}
// ...
}
关于java - 使用 'compareTo' 比较两个对象 ArrayLists 的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57754074/