2014-03-27 2 views
0

문제가 생겼지 만 이유를 이해하지 못합니다. 문제는 내 ArrayList에 요소를 추가하려고 할 때입니다. 여기알고리즘 문제, android java

test: je beug pas2 
test: size2 
test: id casier2 
test: id case5 
test: que vaut add5 

==> 내 나쁜 영어에 대한

delvikvm: threadid=1: thread exiting with uncaught exception (group=0x415072a0) 
java.lang.indexOutOfBoundsException: Invalid index 2, size is 1 

죄송합니다 버그 메시지 :

ArrayList<Integer> lesCasesCoches = new ArrayList<Integer>(); 
    lesCasesCoches.clear(); 
    Log.w("Test", "je beug pas" + idCasier); 
    for (int f = 0; f < laCave.requeteIdCasier.size(); f++) { 
     if (laCave.requeteIdCasier.get(f) == idCasier) { 
      Log.w("Test", "size" + f); 
      Log.w("Test", "id casier" + laCave.requeteIdCasier.get(f)); 
      Log.w("Test", "id case" + laCave.requeteIdCase.get(f)); 
      int casesAdd = laCave.requeteIdCase.get(f); 
      Log.w("Test", "que vaut add" + casesAdd); 
      lesCasesCoches.add(casesAdd); 
      Log.w("test", "Cases cochés" + lesCasesCoches.get(f)); 
     } 
    } 

가 여기 내 오류 로그입니다 : 다음은 내 코드입니다. 시간을 내 주셔서 대단히 감사합니다.

+0

사용 된 모든 변수를 포괄하는 추가 코드를 게시하십시오. – Philip

답변

2

변경

Log.w("test","Cases cochés"+lesCasesCoches.get(f)); 

Log.w("test","Cases cochés"+lesCasesCoches.get(lesCasesCoches.size()-1)); 
+0

내가 probleme이 줄을 생각 .... 대단히 감사합니다. lesCasesCoches.add (casesAdd) 이 그래서 난 후 juste Log.w에보고 생각하지 않는다 감사를 대단히 (: – user3466795

0

여기에 몇 가지가 있습니다 : 1) 방금 만든 배열을 지울 필요가있는 이유는 무엇입니까? 2) laCave.requeteIdCase 및 laCave.requeteIdCasier에 f 위치에 액세스하지만 f는 laCave.requeteIdCasier.size()에만 바인딩됩니다. RequeteIdCase가 requeteIdCasier보다 적은 요소를 가지고 있기 때문에 충돌이 일어날 가능성이 있습니다 (해당 용어의 의미는 무엇이든간에)

+0

내가 버그를봤을 때 나는 많은 것을 만들려고 노력했기 때문에 ...정말 어리 석다 :/ 그리고 그들은 항상 같은 수의 요소를 가지고 있습니다 :) 고마워 – user3466795

+0

두 번째 부분이 문제를 해결 했습니까? –

+0

아니요 두 배열의 요소 수가 같으므로 아무 문제가 없습니다. 나는 뇌에 초점을 맞 춥니 다. 내 배열 목록에 요소가 있었지만 로그에는 없었습니다 .w ...하지만 당신의 도움으로 계속할 수 있습니다. 감사합니다. 내 시험은 tomoroow입니다. ^^ " – user3466795

1

나는 이것이 예외 오류라고 생각합니다.

Log.w("test","Cases cochés"+lesCasesCoches.get(f)); 

변경하십시오.

Log.w("test","Cases cochés"+casesAdd); 
0

에 아마 때문에이 문장의 발생 if (laCave.requeteIdCasier.get(f) == idCasier) 그것이 사실이 아니라면 다음 루프 앞으로 갈 것입니다 따라서는 '원 f를 증가하기 때문에 t 일치로

 lesCasesCoches.add(casesAdd); 
     Log.w("test","Cases cochés"+lesCasesCoches.get(f)); 

그래서 대신에 점점 f'th 항목 당신은 가야 마지막

Log.w("test","Cases cochés"+lesCasesCoches.get(lesCasesCoches.size()-1)); 
이 오류는 실제로 기록에 의해 발생
0

다음에서

test: je beug pas2 
test: size2 
test: id casier2 
test: id case5 
test: que vaut add5 
java.lang.indexOutOfBoundsException: Invalid index 2, size is 1 

:

Log.w("test", "Cases cochés" + lesCasesCoches.get(f)); 

설명 디버그 로그에서 을 먼저Integer 5를 casesAdd에서 이 2 일 때이됩니다. 숫자를 처음으로 추가하기 때문에 은 lesCasesCoches입니다. 그런 다음 문제가있는 줄을 호출하면 세 번째로 (0부터 시작하는 인덱스)에 액세스하려고합니다. 요소는 lesCasesCoches이고, 결과적으로 IndexOutOfBoundsException이됩니다.

해결 방법은 실제로 필요하지 않은 경우 줄을 제거하거나 lesCasesCoches.get(lesCasesCoches.size() - 1)을 사용하여 마지막으로 추가 한 IntegerlesCasesCoches에서 가져 오는 것입니다.