2016-03-31 20 views
-1

Java'da bir kart sınıfı üzerinde çalışıyorum ve belirli bir yöntemin uygulanmasından emin değilim. Kartlar listesindeki en yüksek değer kartını bulmak ve döndürmek için bir compareTo yöntemi kullanan statik bir yöntem (en çok arayacağım) eklemem gerekir. Ancak, listeyi geçmek için bir yineleyici kullanmam gerekiyor.Yineleyici (Java) kullanarak bir listede en yüksek değeri döndürme yöntemi

Uyguladığım compareTo yöntemi aşağıdadır. Kartları sıraya göre sıralar, önce sıraya göre sıralayın.

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; 
    } 

} 

Ayrıca iki enum'u da takımım ve rütbem için ekliyorum. şeyler kafa karıştırıcı kalmamak

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

      }    
} 

Ben bütün sınıfını dahil etmek istemiyorum ama tek yapıcısı değişkenleri, rütbe ve tip Sıralaması ve Suit takım elbise içerir. Sıra ve takım elbise ve bir toString() yöntemi için erişim yöntemleri.

Yanıtı takip ederek zor bir yöntem yaptım.

+0

maksimum değerini tutacak senin ' v max() ' yöntem gibi görünüyor. –

+0

Özür dilerim, bunun çok net olmadığını farkettim. Max() yöntemi sorun, henüz bir yöntemim yok, nasıl uygulanacağından emin değilim. Bir listeyi sıralamak için compareTo yöntemini kullanacağını ve en büyük (ilk olan) değerini döndüreceğini, ancak yineleyici bölümünün beni attığını varsayalım. Cheers –

cevap

0

Yalnızca en yüksek değere ihtiyacınız varsa, aslında listeyi sıralamanız gerekmez. Bunun yerine:

  • doğrula bu liste, yani en az bir element, it.hasNext() == true
  • deposu bir süre döngü listesinin geri kalanı boyunca değişken
  • yineleme ilk değer (it.next()) sahiptir ve her ne zaman Bulndğnz öğe ucunda değişken
  • yeni max saklamak, sizin değişkeninde yüksekse, değişken en azından ne görmek gerek
+0

Bir yöntem ekledim. Düşündüğün bu muydu? Rafine edilebilir mi yoksa kurguya mı ihtiyacı var? –

+0

Evet demek istediğim buydu. Ne istediğini yapıp yapmadığını test etmeni öneririm. Ama küçük bir sözdizimi hatası ve eksik yerel değişken beyanı dışında, çalışmalıdır. –

+0

Arındırmaya gelince, değiştireceğim tek şey "it" bedeninin başlangıcındaki durumdan hemen önce bir kere "it.next()" demesidir. Yineleme ve dolayısıyla sonsuz bir döngü mümkün değildir. Bu sadece okunabilirlik meselesi, fonksiyonel bir hata değil. –

İlgili konular