java.lang.arrayindexoutofboundsexception

Discussione in 'Java' iniziata da motocross'88, 26 Ottobre 2009.

Tag (etichette):
  1. motocross'88

    motocross'88 Nuovo Utente

    Registrato:
    26 Ottobre 2009
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    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);
     }
    
     
  2. lespaul

    lespaul Utente Attivo

    Registrato:
    30 Luglio 2009
    Messaggi:
    91
    Mi Piace Ricevuti:
    6
    Punteggio:
    0
    Home Page:
    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
     
  3. motocross'88

    motocross'88 Nuovo Utente

    Registrato:
    26 Ottobre 2009
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    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: 26 Ottobre 2009
  4. lespaul

    lespaul Utente Attivo

    Registrato:
    30 Luglio 2009
    Messaggi:
    91
    Mi Piace Ricevuti:
    6
    Punteggio:
    0
    Home Page:
    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
     
  5. motocross'88

    motocross'88 Nuovo Utente

    Registrato:
    26 Ottobre 2009
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    grazie tante! con questi passaggi ho capito molte cose!! :)
     
  6. motocross'88

    motocross'88 Nuovo Utente

    Registrato:
    26 Ottobre 2009
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    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: 26 Ottobre 2009
  7. lespaul

    lespaul Utente Attivo

    Registrato:
    30 Luglio 2009
    Messaggi:
    91
    Mi Piace Ricevuti:
    6
    Punteggio:
    0
    Home Page:
    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
     
  8. motocross'88

    motocross'88 Nuovo Utente

    Registrato:
    26 Ottobre 2009
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    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..
     
  9. motocross'88

    motocross'88 Nuovo Utente

    Registrato:
    26 Ottobre 2009
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    trovato! risolto tutto!
    grazie per aver dato una mano! ;)
     
  10. alessandro1997

    alessandro1997 Utente Attivo

    Registrato:
    6 Ottobre 2009
    Messaggi:
    5.303
    Mi Piace Ricevuti:
    1
    Punteggio:
    0
    Occupazione:
    Studente
    Località:
    Roma
    Home Page:
    Senza parole :D
     
Sto caricando...

Condividi questa Pagina