Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
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
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


Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
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...
Logitech G325: audio di fascia alta, wir...
Nessuna pubblicità su Claude, per...
Gli stipendi nel settore tech? Sono anco...
Problemi con la stampa 3D? Un prompt per...
Amazon Leo amplia i contratti con SpaceX...
Basta Purefication, il Giurì bloc...
LibreOffice 26.2 migliora prestazioni e ...
La Cina si prepara a un test della capsu...
La NASA rende note alcune informazioni a...
ASUS ExpertCenter PN54: mini PC Copilot+...
Geely userà una fabbrica europea ...
Leica Camera tratta la cessione della ma...
La nuova AMD non è più 'ec...
La Cina non è più la pecor...
Un SSD accanto alla GPU: la ricetta di Z...
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: 19:27.


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