2011-12-02 3 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 번 줄을보고 자바가 0으로 인덱싱을 시작한다는 것을 기억하십시오. 이것은 arraylist의 내용이 0에서 cards.size() - 1 (배타적)이된다는 것을 의미합니다. – Carsten

답변

7

cards.get(cards.size())은 항상 실패합니다.

색인이 생성되어 있기 때문입니다. 크기가 6 인 경우 색인은 0,1,2,3,4,5입니다.

마지막 두 장을 원하면 cards.get(cards.size()-2)cards.get(cards.size()-1)을 사용하십시오.

+0

대단히 감사합니다 :) – user1078028

0

두 번째 줄에 cards.get(cards.size()) 코드로 문제가 발생합니다.

Java 목록의 색인은 0에서 시작하므로 cards.size()은 정의상 cards 컬렉션 외부의 요소에 액세스하고 IndexOutOfBoundsException을 던집니다. cards will always be at의 마지막 요소는 cards.size() - 1`입니다.

0

여기에 문제의 : cards.get(cards.size())

ArrayList 그냥 배열처럼 - 그것의 6 개 요소가있는 경우 (배열 인덱스 0이 아닌 1부터 시작하기 때문에), 다음 마지막 항목의 지수는 5입니다.

관련 문제