2011-12-02 14 views
0

私は基本的なJavaカードゲームを書いていますが、私は java.lang.IndexOutOfBoundsException: Index: 6, Size 6 (in java.util.ArrayListこのコードでエラーが発生しました。IndexOutOfBoundsException ArrayListエラー

public void simple() { 
     if (cards.get(cards.size()-1).getSuit().equals(cards.get(cards.size()).getSuit())) { 

      int last=cards.size()-1; 
      Card c=cards.remove(last); 
      cards.set(last-1,c); 

     } 
     else { 
      System.out.println("hi"); 
     } 
    } 
+0

2行目を見て、Javaが0でインデックス付けを開始することを忘れないでください。これは、arraylistの内容が0からcards.size() - 1(排他的)になることを意味します。 – Carsten

答えて

7

cards.get(cards.size())を呼び出すたびに失敗します。

インデックスが付けられているからです。したがって、サイズが6の場合、インデックスは0,1,2,3,4,5です。

最後の2枚のカードを使用する場合は、cards.get(cards.size()-2)cards.get(cards.size()-1)を使用してください。

+0

ありがとうございました:) – user1078028

0

問題は2行目のコードcards.get(cards.size())で発生します。

Javaのリストのインデックスは0から始まるので、は、定義上、cardsコレクションの外側の要素にアクセスし、IndexOutOfBoundsExceptionを投げています。 cards will always be atの最後の要素は、cards.size() - 1`です。

0

ここにあなたの問題です:cards.get(cards.size())

ArrayListは、単にアレイのようなものです - それはそれで6つの要素を持っている場合、最後の項目のインデックスは、(配列はインデックス0、ない1から始まるため)5です。

関連する問題