2016-03-31 11 views
-1

私はJavaのカードクラスで作業していますが、特定のメソッドの実装についてはわかりません。私はcompareToメソッドを使ってカードのリストの中で最高の値のカードを見つけて返す静的メソッド(maxと呼ぶ)を含める必要があります。しかし、リストをトラバースするためにイテレータを使用する必要があります。イテレータ(Java)を使用してリスト内の最高値を返す方法

以下は私が実装した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; 
    } 

} 

私は、スーツとランクの2つの列挙型も含めています。

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)]; 

      }    
} 

私は物事が混乱し得ることはありませんが、それは、変数、単一のコンストラクタを持つタイプのランクとスーツのランクとスーツを含ませ、クラス全体を含める必要はありません。ランクとスーツのアクセサメソッドと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; 
     } 
    } 
} 
+0

最大値を保持しますあなたの ' max() 'メソッドは次のようになります。 –

+0

謝罪、私はそれを非常に明確にしなかったことを実感します。 max()メソッドが問題ですが、メソッドを実装する方法がわからないため、まだメソッドがありません。私はそれがリストをソートするためにcompareToメソッドを使用し、最大の(これは最初の)値を返しますが、反復子の部分は私をスローしたと仮定します。乾杯 –

答えて

0

最大値が必要な場合は、実際にリストをソートする必要はありません。代わり:

  • 検証そのリストは、すなわち、少なくとも1つの要素、it.hasNext() == true
  • ストアwhileループ内のリストの残りの部分を介して可変
  • 反復の最初の値(it.next())を有しており、いつでもあなたがでているアイテムは終わりに変数
  • で新しい最大を格納し、あなたの変数の1以上である、変数は、我々は、少なくとも何を参照する必要が
+0

私は方法を追加しました。あなたが示唆していたことでしたか?洗練されたものか、それとも編集が必要なのでしょうか? –

+0

はい、それは私が意味するものです。私はあなたが望むことをしているかどうかを調べるためにテストすることをお勧めします。しかし、マイナーな構文エラーと欠落したローカル変数宣言の違いは、うまくいくはずです。 –

+0

精製については、私が変更したいのは、 'it'next()を' while'ボディの先頭にある条件の前に一度だけ呼び出すことです - それが毎回呼び出されることは明らかですループが無限ループになることはありません。それは単なる可読性の問題ですが、機能的なエラーではありません。 –