2016-03-31 8 views
-1

Я работаю над классом карты в Java, и я не уверен в реализации определенного метода. Мне нужно включить статический метод (который я буду называть max), который использует метод compareTo для поиска и возврата карты с наивысшим значением в список карточек. Однако мне нужно использовать Iterator для перемещения по списку.Метод возврата наивысшего значения в список с использованием итератора (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; 
    } 

} 

Я также включаю в себя мои два перечисления на костюм и ранг.

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

Мы по крайней мере, должны видеть, что ваш ' макс() ' метод выглядит. –

+0

Извиняюсь, я понимаю, что я не сделал это очень ясно. Метод max() является проблемой, у меня пока нет метода, поскольку я не уверен, как его реализовать. Я предполагаю, что он будет использовать метод compareTo для сортировки списка, а затем вернуть наибольшее значение (которое будет первым), но часть итератора меня бросила. Cheers –

ответ

0

Если вам нужно только максимальное значение, вам не нужно действительно сортировать список. Вместо того, чтобы:

  • Проверить, что список содержит, по меньшей мере, один элемент, т.е. it.hasNext() == true
  • магазина первое значение (it.next()) в переменной
  • итерацию через остальную часть списка в цикле в то время, и всякий раз, когда деталь вы находитесь выше, чем в переменной, сохраните новый максимум в переменной
  • в конце концов, переменная будет содержать максимальное значение
+0

Я добавил метод. Это то, что вы предлагали? Может ли он быть усовершенствован или он нуждается в редактировании? –

+0

Да, вот что я имел в виду. Я предлагаю вам проверить его, чтобы убедиться, что он делает то, что вы хотите. Но помимо незначительной синтаксической ошибки и отсутствующего объявления локальной переменной, она должна работать. –

+0

Что касается уточнения, единственное, что я бы изменил, я бы назвал 'it.next()' только один раз, перед условием прямо в начале тела 'while', чтобы было очевидно, что он вызывается в каждом итерации, и поэтому нет бесконечной петли. Это просто вопрос читаемости, но не функциональная ошибка. –

Смежные вопросы