繁体   English   中英

使用迭代器(Java)返回列表中最高值的方法

[英]Method for returning highest value in a list using iterator (Java)

我正在使用 Java 开发卡片类,但不确定某个方法的实现。 我需要包含一个静态方法(我将其称为 max),该方法使用 compareTo 方法查找并返回卡片列表中价值最高的卡片。 但是,我需要使用迭代器来遍历列表。

下面是我实现的 compareTo 方法。 它将卡片按降序排序,首先是花色,然后是排名。

public int compareTo(Card card) {

if (this.rank.compareTo(card.rank) > 0){
    return 1;
} else if (this.rank.compareTo(card.rank) < 0){
    return -1;
} else {

    if(this.suit.compareTo(card.suit) > 0){
        return 1;
    } else if (this.suit.compareTo(card.suit) < 0){
        return -1;
    } else {
        return 0;
    }

}

我还包括我的两个西装和等级枚举。

enum Rank{TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), 
          NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);

          private int value;

          Rank(int i){
              value=i;
          }

          public int getValue(){
              return value;
          }

          public Rank getPrevious(){
              return values()[ordinal() > 0 ? ordinal()  - 1 : 0];
          } 

}   


enum Suit{CLUBS, DIAMONDS, HEARTS, SPADES;

          public static Suit randomSuit(){
              Random random = new Random();
              return values()[random.nextInt(values().length)];

          }            
}

我不想包含整个类,所以事情不会变得混乱,但它包含变量、等级和带有单个构造函数的 Rank 和 Suit 类型的西装。 rank 和suit 的访问器方法和toString() 方法。

我按照答案做了一个粗略的方法。

Iterator<E> it = collection.iterator;
E max = null;
while(it.hasNext()) {
    if(max == null) {
        max = it.next();
    } else {
        e = it.next();
        if(e.compareTo(max) > 0) {
            max = e;
        }
    }
}

如果您只需要最大值,则不需要实际对列表进行排序。 反而:

  • 验证列表至少有一个元素,即it.hasNext() == true
  • 将第一个值 ( it.next() ) 存储在一个变量中
  • 在 while 循环中遍历列表的其余部分,每当您所在的项目高于变量中的项目时,将新的最大值存储在变量中
  • 最后,变量将保持最大值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM