|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
|
[Java]Array Exception
Sto progettando un piccolo software per l'università e mi è venuto fuori questo errore
ArrayIndexOutOfBoundsException: at java.lang.reflect.Array.get(Native Method) ho letto su internet che appare se si vuole mettere un valore all'interno di una posizione di un array che non esiste; ad esempio se voglio mettere qualcosa nella posizione 10 di un array che arriva al massimo a 8. Qualcuno mi puo spiegare meglio questo errore? (perche non credo di aver fatto un errore tanto stupido) Grazie Ultima modifica di Killer Application : 13-02-2008 alle 18:11. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Documentazione ufficiale SUN :
-> javadoc for class ArrayIndexOutOfBoundsException Quote:
L'indice è illegale perchè è un numero negativo oppure perchè è un numero uguale o maggiore al "size" (alla dimensione) dell'array. Ciao |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Aug 2007
Città: caserta
Messaggi: 78
|
se poi nn riesci a trovare l'errore posta il codice e vediamo... ciao
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Feb 2006
Messaggi: 57
|
A volte capita perchè non si considera che l'indice di array e collection inizia da 0 e non da 1.
__________________
MB Asrock Alive Xfire-ESata2 CPU Athlon 64 X2 5600+ RAM 2x2GB DDR2 800 Geil Black Dragon HD 500gb WD sata VGA Sapphire HD3850 512mb MAST nec AD-7191-S |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
|
ho perso la testa mezza serata e non ho tolto un ragno dal buco.
ho ricontrollato tutti i for i if del caso ma nada.... Ho controllato anche l'errore dell'inizio dell'array come suggerito (ovvero che parte da 0) ma niente. a questo punto non so che fare! se qualcuno mi puo dare una mano in pvt ne sarei grato, perche non posso postare il codice in pubblico. Ah non vi spaventate sono giusto una 40 di linee di codice per ora quindi niente di che |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Feb 2005
Città: Milano
Messaggi: 35
|
Se e' un'applicazione multithread probabilmente due o piu'
thread stanno accedendo in modo concorrente alla stessa struttura dati senza un'opportuna sincronizzazione. Per esempio un thread rimuove un elemento mentre un altro cerca di recuperare lo stesso elemento (credendo sia ancora nella struttura).
__________________
Res ipsa loquitur |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
potrebbe anche essere alla fine, fino a dove arrivi?
__________________
|Java Base| |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
|
Quote:
però non so come venirne a capo, cioè ho capito l'errore ma non so come risolverlo |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Ma in questo caso perche' lancia ArrayIndexOutOfBoundsException,
che non c'entra una?
__________________
|Java Base| |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Esatto, quella ecc. viene lanciata se usi un indice <0 o >=dimensione
__________________
|Java Base| |
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Feb 2005
Città: Milano
Messaggi: 35
|
Quote:
Thread2: rimuovo elemento n, t2_size = M - 1 Thread1: recupero ultimo elemento, get(t1_size-1) = get (M-1) OutOfBoundEx
__________________
Res ipsa loquitur |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
|
Quote:
supponiamo sta stringa Codice:
matrice è una string
matrice[9]="14";
int idi = Integer.parseInt(matrice[9]);
for(int i = 0; i<10;i++){
if (matrice_appoggio[i][idi]!="//"){
matrice_appoggio[i][idi]=matrice[3]
};
};
|
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
|
Quote:
perche credo sia questo l'errore ma non riesco a trovarlo |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Potresti sempre sostituire gli array di primitive (o di String) che usi nel codice con dei Vector (di primitive o di String), dato che la classe Vector è syncronized...
Inoltre se usi un Iterator per scandire il Vector, in caso qualche altro thread tenti di accedere al Vector per modificarlo parte una bella ConcurrentModificationException e così sai che il problema è quello. |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Sì ma questo non elimina tutti i problemi!! Cioè il fatto che una collezione sia synchronized vuol solo dire che la mutua esclusione è sulla singola invocazione di 1 metodo.
Se su una collezione si devono fare operazioni composte, del tipo check-then-act o read-modify-write, allora anche se la collezione in sé è synchronized, la sequenza va fatta in modo atomico e quindi è necessario effettuare il client-side locking, se la collezione lo permette.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
|
rignrazio per i consigli ma sono ancora a uno step base si java.
quindi ancora niente vector, e il prof consiglia di usare gli strumenti utilizzati in classe. |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Questo a patto che le manipolazioni desiderate (scusate l'espressione un poco ambigua Non ho capito tutte le implicazioni della tua osservazione circa il fatto che se anche la collection fosse syncronized sarebbe comunque neccessario fornire altre garanzie: basterebbe per esempio sincronizzare l'intero metodo che opera sulla collection stessa, per esempio? (dove posso documentarmi nello specifico?) |
|
|
|
|
|
|
#19 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quindi il comportamento fail-fast è da usare solo per rilevare dei bug, cioè appunto se sbuca fuori un ConcurrentModificationException, allora è un bug e basta. Quote:
Codice:
Vector v = .....
synchronized (v) {
int size = v.size ();
if (size > 0)
v.remove (size-1);
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 14-02-2008 alle 15:45. |
||
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
e comunque è consigliato utilizzare al posto delle vecchie classi che implementano synchronized (come Vector) le nuove classi (come ArrayList) wrappandole con Collections.synchronizedList(List<T> list)
__________________
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:35.












|







