2014-02-09 4 views
0

Я пытаюсь создать карточную игру в java, и я хочу получить карты, чтобы показать их Костюм и номер, так что 4 бриллианта будут 4 (бриллиант), кроме (алмаз) будет U + 2666 unicode.Я не понимаю этот цикл

Пример, который у меня есть в моей книге, чтобы отображать костюмы для карт, выглядит следующим образом, но я действительно не понимаю. Я привык к циклам, которые используют i < 0, i ++. Может ли кто-нибудь помочь объяснить это или, по крайней мере, сравнить его с нормальным циклом? Благодаря!

В качестве альтернативы, можно ли использовать оператор switch для отображения костюмов?

private String getCardsDisplay() { 
    StringBuilder cards = new StringBuilder(); 


    for (Card card : hand.getCards()) { 
     cards.append(" "); 
     cards.append(card.getRank()); 


     switch (card.getSuit()) { 
      case CLUBS: 
       cards.append("\u2663"); 
       break; 
      case DIAMONDS: 
       cards.append("\u2666"); 
       break; 
      case HEARTS: 
       cards.append("\u2665"); 
       break; 
      case SPADES: 
       cards.append("\u2660"); 
       break; 
     } 
    } 
    return cards.toString(); 
} 
+1

Предполагая, что hand.getCards() возвращает массив (который я буду называть вашей рукой), тогда весь цикл цикла может читать: «Для каждой карты в руке добавьте ранг и костюм». Он по существу выполняет итерацию по каждому элементу массива и дает каждому элементу объект карты. – 1110101001

+0

Это называется «усиленным циклом» или «для каждого» цикла. Погугли это. – ApproachingDarknessFish

ответ

1

Это особый вид цикла, называемый «для каждого». Это означает, что он перемещается по каждому объекту в порядке, в массиве или списке, возвращаемом hand.getCards(). Например, если это массив карт, который читает {«10», «J», «Q», «K», «A»}, он будет получать объекты Карты и перемещаться по ним в этом порядке. Он написан для удобства программисту, а также делает код более понятным для тех, кто понимает «для каждого».

1

Это называется цикл или enhanced for. Этот цикл выполняет итерации по элементам массива/Collection, а не по индексам. Например, это for:

for (Card card : hand.getCards()) 

Переберем массива/коллекции, возвращаемой методом getCards(). Тип элементов указан в Card card. Вы сможете получить доступ к каждому элементу по имени card, так что вы можете вызвать метод из класса Card как

card.getRank() 
1

То есть специальный «усовершенствована для цикла». В версиях Java до Java 5 этот цикл будет записан как:

Card[] cards = hand.getCards(); 
for (int i = 0; i < cards.length; i++) { 
    Card card = cards[i]; 
    // the rest of the loop 
} 

Это несколько громоздко. Итак, когда появилась Java 5, в нее был добавлен новый синтаксис для циклирования по массиву. Вот что вы видите здесь.

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