Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-02-2008, 18:07   #1
Killer Application
Senior Member
 
L'Avatar di Killer Application
 
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.
Killer Application è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 18:11   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Documentazione ufficiale SUN :

-> javadoc for class ArrayIndexOutOfBoundsException

Quote:
public class ArrayIndexOutOfBoundsException
extends IndexOutOfBoundsException

Thrown to indicate that an array has been accessed with an illegal index. The index is either negative or greater than or equal to the size of the array.
Tradotto: E' un'eccezione che viene lanciata per indicare un tentativo di accesso all'array stesso tramite un indice illegale.
L'indice è illegale perchè è un numero negativo oppure perchè è un numero uguale o maggiore al "size" (alla dimensione) dell'array.

Ciao
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 22:55   #3
geko84k
Member
 
Iscritto dal: Aug 2007
Città: caserta
Messaggi: 78
se poi nn riesci a trovare l'errore posta il codice e vediamo... ciao
geko84k è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 08:28   #4
JuliusIT
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
JuliusIT è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 11:39   #5
Killer Application
Senior Member
 
L'Avatar di Killer Application
 
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
Killer Application è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:07   #6
FedeX_65246X
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
FedeX_65246X è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:11   #7
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Quote:
Originariamente inviato da Killer Application Guarda i messaggi
Ho controllato anche l'errore dell'inizio dell'array come suggerito (ovvero che parte da 0) ma niente.
potrebbe anche essere alla fine, fino a dove arrivi?
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:15   #8
Killer Application
Senior Member
 
L'Avatar di Killer Application
 
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
Quote:
Originariamente inviato da FedeX_65246X Guarda i messaggi
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).
ecco questa cosa non la sapevo e credo che sia proprio questo il guaio, infatti nel mio programma ci sono un paio di funzioni che agiscono su una stessa matrice.

però non so come venirne a capo, cioè ho capito l'errore ma non so come risolverlo
Killer Application è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:16   #9
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Ma in questo caso perche' lancia ArrayIndexOutOfBoundsException,
che non c'entra una?
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:17   #10
Killer Application
Senior Member
 
L'Avatar di Killer Application
 
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
Quote:
Originariamente inviato da lovaz Guarda i messaggi
potrebbe anche essere alla fine, fino a dove arrivi?
questa non l'ho capita

aspetta credo di aver capito cio che dici, allora mettiamo che creo una matrice[10]

l'ultimo elemento di essa sarà matrice[9].



era questo quello che intendevi?
Killer Application è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:22   #11
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Esatto, quella ecc. viene lanciata se usi un indice <0 o >=dimensione
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:30   #12
FedeX_65246X
Member
 
Iscritto dal: Feb 2005
Città: Milano
Messaggi: 35
Quote:
Originariamente inviato da lovaz Guarda i messaggi
Ma in questo caso perche' lancia ArrayIndexOutOfBoundsException,
che non c'entra una?
Thread1: controllo dimensione array, t1_size = M
Thread2: rimuovo elemento n, t2_size = M - 1
Thread1: recupero ultimo elemento,
get(t1_size-1) = get (M-1)

OutOfBoundEx
__________________
Res ipsa loquitur
FedeX_65246X è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:33   #13
Killer Application
Senior Member
 
L'Avatar di Killer Application
 
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
Quote:
Originariamente inviato da lovaz Guarda i messaggi
Esatto, quella ecc. viene lanciata se usi un indice <0 o >=dimensione
ma il fatto è che ho controllato, ma adesso mi sorge un dubbio.

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]
     }; 
};
il comando integer.parseInt estrae dalla matrice[9] il numero e lo mette come int in "idi" giusto?
Killer Application è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 12:35   #14
Killer Application
Senior Member
 
L'Avatar di Killer Application
 
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
Quote:
Originariamente inviato da FedeX_65246X Guarda i messaggi
Thread1: controllo dimensione array, t1_size = M
Thread2: rimuovo elemento n, t2_size = M - 1
Thread1: recupero ultimo elemento,
get(t1_size-1) = get (M-1)

OutOfBoundEx
posso mandarti un pm con il codice?

perche credo sia questo l'errore ma non riesco a trovarlo
Killer Application è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 14:03   #15
banryu79
Senior Member
 
L'Avatar di banryu79
 
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.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 14:20   #16
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
dato che la classe Vector è syncronized...
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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 14:33   #17
Killer Application
Senior Member
 
L'Avatar di Killer Application
 
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.
Killer Application è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 15:13   #18
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da andbin Guarda i messaggi
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.
Daccordo, ma usando per esempio un'ArrayList al posto degli array e manipolando le istanze della collection solo attraverso l'Iterator può comunque verificare se viene lanciata una ConcurentModificationException...

Questo a patto che le manipolazioni desiderate (scusate l'espressione un poco ambigua ) possano essere interamente implementate usando solo l'Iterator, giusto?

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?)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 15:40   #19
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Daccordo, ma usando per esempio un'ArrayList al posto degli array e manipolando le istanze della collection solo attraverso l'Iterator può comunque verificare se viene lanciata una ConcurentModificationException...
Qui ci sarebbero da dire altre cose, ad esempio che il comportamento "fail-fast" degli iteratori nelle principali collezioni di base non è garantito al 100%. Cioè per come è stato implementato, se un thread concorrente modifica la collezione, potrebbe anche capitare che l'iteratore non se ne accorga.
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:
Originariamente inviato da banryu79 Guarda i messaggi
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?)
Per fare un esempio, se voglio eliminare l'ultimo elemento di un Vector (e non c'è infatti un singolo metodo synchronized apposito per questo), dovrei fare:

Codice:
Vector v = .....

synchronized (v) {
    int size = v.size ();
    if (size > 0)
        v.remove (size-1);
}
Tutta la sequenza deve essere atomica, per questo va fatta tenendo il lock per tutta la sequenza. Che poi lo faccia come blocco synchronized o come metodo synchronized, è indifferente. Ma va fatto, nonostante i singoli metodi di Vector siano synchronized!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)

Ultima modifica di andbin : 14-02-2008 alle 15:45.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2008, 16:13   #20
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
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)
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Segway Navimow presenta la nuova gamma d...
Xiaomi SU7 Pro: l'ispezione dopo 265.000...
Nimbus Innovation Awards 2026: le miglio...
SSD Samsung contraffatto, ma Windows e C...
Enrique Lores, CEO e presidente di HP, l...
SoftBank e Intel preparano la 'memoria d...
Il blocco dei porno per i minori è...
AMD: i nuovi processori Zen 6 saranno (i...
Ancora aumenti per le schede video Radeo...
Sonos presenta Amp Multi a ISE 2026: il ...
Una funzione esclusiva dei Pixel potrebb...
La Cina vieta ufficialmente le maniglie ...
HP e lavoro ibrido: le nuove cuffie Poly...
MSI sta lavorando a un dissipatore ottim...
27 offerte Amazon, le prime 5 in elenco ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:35.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v