java.lang.arrayindexoutofboundsexception

motocross'88

Nuovo Utente
26 Ott 2009
17
0
0
ciao ragazzi! sto creando un algoritmo per la gestione di array paralleli di azioni finanziarie, con le loro quotazioni max e min. una volta inseriti i dati delle azioni (nome, quotazione max, quotazione min), dovrei al "case 4" trovare lo quotazione media globale degli scostamenti. il problema è che quando l'ho testato mi è venuto questo errore "java.lang.arrayindexoutofboundsexception"..mi sembra di capire che sia qualcosa relativo agli indici, ma non riesco capire di più!
qualcuno mi darebbe una mano? grazie tante!!!
vi metto il codice
Codice:
public static void main(String[] args) {
         final int
         	DIM_ARRAY=2;
         double  []
         	quotazioneMaxAzioni, quotazioneMinAzioni;
         String []
         	nomiAzioni;
         String
         	nomeAzioneDaCercare;
         boolean
         	insOK;
         double
         mediaScostamenti,sommaMax, sommaMin;
         int 
         i,
         posizioneAzione,
         opzione;
         
         	
         insOK=false;	
         quotazioneMaxAzioni=new double[DIM_ARRAY];
         quotazioneMinAzioni=new double[DIM_ARRAY];
         nomiAzioni=new String[DIM_ARRAY];
         do{
         	Scrittore.video.println("---------------------");
         	Scrittore.video.println("1* Inserimento dati");
         	Scrittore.video.println("2* Visualizzazione dati");
         	Scrittore.video.println("3* Dati singola Azione");
         	Scrittore.video.println("4* Quotazione media globale degli   scostamenti <Max-Min>");
         	Scrittore.video.println("5* Azione con scostamento Max-Min maggiore");
         	Scrittore.video.println("0* USCITA");
         	Scrittore.video.println("---------------------");
         	opzione=Lettore.tastiera.leggiInt();
           	switch(opzione){
     case 1:
          	for(i=0;i<DIM_ARRAY;i++){
             Scrittore.video.println("Inserire nome azione "+i);
          	nomiAzioni[i]=Lettore.tastiera.leggiString();
          	Scrittore.video.println("Inserire quotazione Max "+nomiAzioni[i]);
          	quotazioneMaxAzioni[i]=Lettore.tastiera.leggiDouble();
          	Scrittore.video.println("Inserire quotazione Min "+nomiAzioni[i]);
          	quotazioneMinAzioni[i]=Lettore.tastiera.leggiDouble();
          	}
	insOK=true;
       	break;
     case 2:
       	if(insOK==true){
       	for(i=0;i<DIM_ARRAY;i++)
          	Scrittore.video.println(nomiAzioni[i]+" Max:"+quotazioneMaxAzioni[i]+" Min:"+quotazioneMinAzioni[i]);
          	}
	else
	Scrittore.video.println("Inserimento non effettuato");
	break;
     case 3: 
	if(insOK==true){
	Scrittore.video.println("Inserire nome azione da cercare");
	nomeAzioneDaCercare=Lettore.tastiera.leggiString();
	posizioneAzione=-1;
	for(i=0;i<DIM_ARRAY;i++)
          	if(nomeAzioneDaCercare.equals(nomiAzioni[i]))
          	posizioneAzione=i;
          	if(posizioneAzione==-1)
          	Scrittore.video.println("Azione non presente in elenco");
          	else
          	Scrittore.video.println("Azione:"+nomiAzioni[posizioneAzione]+
          	" Max:"+quotazioneMaxAzioni[posizioneAzione]+
          	" Min:"+quotazioneMinAzioni[posizioneAzione]);
          	}
	else
	Scrittore.video.println("Inserimento non effettuato");
	break;	
     case 4:
	if(insOK==true){
	sommaMax=0;
	sommaMin=0;
	for(i=0;i<DIM_ARRAY;i++)
          	sommaMax=sommaMax+quotazioneMaxAzioni[i];
          	sommaMin=sommaMin+quotazioneMinAzioni[i];
          	mediaScostamenti=(sommaMax-sommaMin)/(float)DIM_ARRAY;
          	Scrittore.video.println("Media scostamenti "+mediaScostamenti);
	}
	else
	Scrittore.video.println("Inserimento non effettuato");
	break;
             }	
             }while(opzione!=0);
 }
 

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
Ciao Motocross :D benvenuto nel forum,
ti esce l' errore perchè ti sei dimenticato di mettere le parentesi graffe al ciclo for, invece cosi penso che deve andare bene:
Codice:
 case 4:
	if(insOK==true){
	sommaMax=0;
	sommaMin=0;
	for(i=0;i<DIM_ARRAY;i++) {
          	sommaMax=sommaMax+quotazioneMaxAzioni[i];
          	sommaMin=sommaMin+quotazioneMinAzioni[i];
          	mediaScostamenti=(sommaMax-sommaMin)/(float)DIM_ARRAY;
          	System.out.println("Media scostamenti "+mediaScostamenti);
		}
	}
	else
	System.out.println("Inserimento non effettuato");
	break;

perchè senza parentesi graffe al for, fa girare solo l' istruzione successiva, quindi nel tuo caso all'uscita del for
eseguiva solo
Codice:
sommaMax=sommaMax+quotazioneMaxAzioni[i];
e quindi con i = 2 il secondo array era outOfBounds :)

Ciao
 

motocross'88

Nuovo Utente
26 Ott 2009
17
0
0
ciao! grazie lespaul, l'errore è proprio questo!!
ascolta, adesso che funziona però, vedo che mi da 3 risposte, ovvero scostamenti di ogni azione; invece a me interessa quello generale (ovvero la somma degli scostamenti diviso per il numero delle azioni)......come posso modificare il codice?
 
Ultima modifica:

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
Ciao, allora devi togliere l' istruzione:
Codice:
Scrittore.video.println("Media scostamenti "+mediaScostamenti);
fuori dal for in questo modo :
Codice:
for(i=0;i<DIM_ARRAY;i++) {
          	sommaMax=sommaMax+quotazioneMaxAzioni[i];
          	sommaMin=sommaMin+quotazioneMinAzioni[i];
          	mediaScostamenti=(sommaMax-sommaMin)/(float)DIM_ARRAY;
}
Scrittore.video.println("Media scostamenti "+mediaScostamenti);

Ciao
 

motocross'88

Nuovo Utente
26 Ott 2009
17
0
0
lespaul, mi aiuteresti a risolvere ultimo problema?...trovare l'azione con il massimo scostamento tra max e min.
ho scritto questo, ma mi da di nuovo il solito errore((
Codice:
	if(insOK==true){
	posizioneAzione=-1;
	maxDiff=quotazioneMaxAzioni[0]-quotazioneMinAzioni[0];
	posizioneMaxDiff=0;
	for(i=1;i<DIM_ARRAY;i++) 
            {
             if(quotazioneMaxAzioni[0]-quotazioneMinAzioni[0]>maxDiff)
          	maxDiff=quotazioneMaxAzioni[0]-quotazioneMinAzioni[0];
            }
	Scrittore.video.println("Azione con scostamento Max"+nomiAzioni[posizioneAzione]);
          	Scrittore.video.println("in posizione "+posizioneAzione);
          	Scrittore.video.println("ha il prezzo massimo pari a "+maxDiff);
          	}
             else
	Scrittore.video.println("Inserimento non effettuato");
            break;
 
Ultima modifica:

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
Certo, ;), solo che non ho idea che cosa sia il massimo scostamento :confused:. Comunque, da quanto ho capito dovrebbe essere la differenza
Codice:
maxDiff=quotazioneMaxAzioni[i]-quotazioneMinAzioni[i];
giusto??
Quindi dovresti calcolare il massimo fra le differenze per ogni elemento di indice i ? Se è questo allora ecco il codice:
Codice:
maxDiff=0
for(i=1;i<DIM_ARRAY;i++) {
int diff = quotazioneMaxAzioni[i]-quotazioneMinAzioni[i];
if(diff>maxDiff) maxDiff = diff;
}
Provalo e magari fammi sapere :rolleyes:
Ciao
 

motocross'88

Nuovo Utente
26 Ott 2009
17
0
0
si, hai capito bene. la singola differenza della quotazione, tra max e min di un titolo.
a me hanno suggerito il metodo della sentinella
Codice:
maxDiff=quotazioneMaxAzioni[0]-quotazioneMinAzioni[0];
posizioneMaxDiff=0;
for(i=1;i<DIM_ARRAY;i++) 
  {
if(quotazioneMaxAzioni[i]-quotazioneMinAzioni[i]>maxDiff)
maxDiff=quotazioneMaxAzioni[0]-quotazioneMinAzioni[0];

pero sta sentinella non funziona, forse perchè nn la capisco(

e come hai scritto tu, che avrei fatto anchio cosi, mi da il solito errore..
 
Discussioni simili
Autore Titolo Forum Risposte Data
Z java.lang.OutOfMemoryError: bitmap size exceeds VM budget Sviluppo app per Android 1
C errore: java.lang.reflect.invocationtarget Java 0
Gengi java.lang.OutOfMemoryError: PermGen space Web Server 1
L java api_google Javascript 0
F NetBeans problema creazione progetto Java Windows e Software 0
Z [java] bufferizzare stream audio da mic Java 1
L java + Api di google Javascript 1
A [Cerchiamo] [Retribuito/a] "Java Solution Architect" Offerte e Richieste di Lavoro e/o Collaborazione 1
F Script java elenco alfabetico non funziona Javascript 3
C Serializzazione in java Java 1
M AIUTO ESERCIZIO JAVA Javascript 1
M Ripasso Java Offerte e Richieste di Lavoro e/o Collaborazione 0
F [OFFRO - RETRIBUITO] Sviluppatori JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
L leggere RGB di un pixel dello schermo in java Java 1
I Creazione programmino JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
F Aiuto java script Javascript 2
T [Java] tipi generici con esempio pratico Java 1
J File audio in java Java 0
V [JAVA] come integrare un software scritto in java su una pagina web? Java 4
C Java client / server Java 0
F [OFFRO][RETRIBUITO] PROGRAMMATORE JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
C [Java] testare un metodo con Junit Java 1
A [Java] caricare un url esterno senza utilizzo di iframe Java 0
S [OFFRO] Debug delle tue applicazioni Java Offerte e Richieste di Lavoro e/o Collaborazione 1
L [Java] Aggiungere elementi ad array JSON Java 0
B [Java] Paginazione in risposta HTTP Java 0
A [Java]Date diminuite di un giorno su db MySQL Java 0
K [Java] aiuto switch case Java 1
P [Java] limite destro di un JFrame Java 5
D [Java] far partire JProgressBar all'apertura di un JFrame Java 1
N [java con eclipse]metodo ricorsivo che accetta in ingresso un char e restituisce un int Java 0
A Verifica validità data in Java Java 2
L [Java] Errore json conversione Java 0
Drago73 [Java] leggere/scrivere txt server Java 0
M [Javascript] Java card Java 0
serena.cerutti posizioni aperte: PhP, Java, .Net Offerte e Richieste di Lavoro e/o Collaborazione 0
N [Java]problema jasper report dopo compilazione file .jar Java 0
N [Java] Piccolo jform per calcolo totale da 2 campi i double Java 0
N [Java] jbutton con funzioni Java 2
M [java] esercizio lunghezza array di stringhe Java 0
A [java] problema esercizio Java 0
filograndipad2 Esempi chiari e completi sul funzionamento degli eventi in Java Java 1
Raziel84 [Java] Combinazione elementi matrice Java 0
A [java] problema esercizio array Java 5
L da php a popup java PHP 2
W Piccolo sistema per gestire alcune periferiche, Java o altro linguaggio? Java 8
S Cerco programmatore java Offerte e Richieste di Lavoro e/o Collaborazione 0
Z [Java] Grassetto assente su font incorporato nel pacchetto jar Java 0
O [Java] Lettura da JSON File Java 0
Z [Java] Caratteri distorti e spaziature errate nelle stampe di componenti swing Java 0

Discussioni simili