Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    java.lang.arrayindexoutofboundsexception

    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. #2
    trovato e risolto! il tutto stava in un paio di parentesi dimenticate, perciò il for non mi eseguiva tutte le istruzioni!

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    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;
              	Scrittore.video.println("Media scostamenti "+mediaScostamenti);
    	}
    	else
    	Scrittore.video.println("Inserimento non effettuato");
    	break;
    Non hai usato le parentesi graffe per il for.. nel codice che hai scritto esegui 2 volte l'istruzione
    codice:
     sommaMax=sommaMax+quotazioneMaxAzioni[i];
    e quando passi all'istruzione successiva con indice i=2.. essendo la dimensione del vettore pari a 2 viene lanciata un'arrayindexoutofboundsexception..
    Per prevenire questo tipo di errore potresti dichiarare la variabile i direttamente all'interno del ciclo for:
    codice:
     for(int i=0;i<DIM_ARRAY;i++)
    in questo modo errori del genere sono visibili prima di mandare in esecuzione il programma

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.