2014-12-18 5 views
2

У меня проблема.Ошибка ArrayIndexOutOfBounds

public class Deck { 
    //deck contents returns every card in the deck 

    String[] suits = {"Clubs", "Hearts", "Diamonds", "Spades"}; 
    String[] ranks = {"Deuce", "Three", "Four", "Five", "Six", "Seven", 
         "Eight", "Nine", "Ten", "Jack", "Queen", "King", "Ace"}; 
    int[] values = {2,3,4,5,6,7,8,9,10,10,10,10,11}; 

    ArrayList<Card> deck = new ArrayList<Card>(); 

    ArrayList<Card> cardsDealt = new ArrayList<Card>(); //unused here 

      Random rand = new Random(); //unused here 

    public Deck(){ 
      for(int i = 0; i < suits.length; i++){ 
       for(int k = 0; i < ranks.length; k++){ 
         deck.add(new Card(suits[i], ranks[k], values[k]));   
       } 
      } 
     } 

Я получаю сообщение об ошибке IndexOutOfBoundsException. Моя задача - создать объект Deck, который затем добавит 52 объекта карты в колоду ArrayList. Я написал цикл for для создания каждой из возможных 52 карт в колоде карт. Какая ошибка?

+5

'i

+0

что бы я использовал вместо этого? – noobforce

+4

Посмотрите на петлю осторожно. Посмотрите на переменную, которую она инициализирует и увеличивает, а затем посмотрите на переменную, которую вы проверяете. –

ответ

4

Ваша проблема здесь:

for(int i = 0; i < suits.length; i++){ 
    for(int k = 0; i < ranks.length; k++){ 
       ^
     deck.add(new Card(suits[i], ranks[k], values[k]));   
    } 
} 

это не i < ranks.length но k < ranks.length!

for(int i = 0; i < suits.length; i++){ 
    for(int k = 0; k < ranks.length; k++){ 
     deck.add(new Card(suits[i], ranks[k], values[k]));   
    } 
} 
+0

Спасибо, я пропустил это lol – noobforce

+0

@noobforce не проблема, это иногда случалось;) не забудьте внести исправления! –

+0

да, мне нужно подождать 10 мин. – noobforce

1

переставляет i для k здесь:

for(int k = 0; i < ranks.length; k++){ 

т.е.

for(int k = 0; k < ranks.length; k++){ 

Вы постоянно проверять ли i меньше ranks.length, чтобы завершить цикл (который в этом внутреннем цикл, он всегда будет ...), поэтому k продолжает увеличиваться за пределами ranks.length, следовательно t он ошибается, как только вы пытаетесь получить доступ к костюмам [13].