Visualizzazione dei risultati da 1 a 5 su 5

Discussione: esercizio array

  1. #1

    esercizio array

    Ciao ragazzi,
    il prof ha iniziato a spiegare finalmente gli array e ci ha dato questo esercizio:

    Scrivere un programma modulare Libretto per la gestione dei voti verbalizzati da uno studente. Il programma deve dare la possibilità all'utente di aggiungere nuovi voti, stampare la lista dei voti conseguiti, stampare la media complessiva, uscire dal programma. L'interazione dell'utente col programma avviene tramite un menu di scelta che presenta le varie opzioni selezionabili con la pressione di singoli caratteri.

    Andando per gradi (alcune parti del programma ancora non le ho fatte come potete vedere), ho fatto:

    codice:
    public class libretto { 	 	
    public static void main (String args[]) { 		 		
    boolean end = false; 		
    char start; 			 		
    
    while (!end) { 			 			
    System.out.println("[I] Inserisci voti"); 			
    System.out.println("[S] Stampa i voti "); 
    System.out.println("[M] Calcola la media "); 			
    System.out.println("[E] Esci"); 			
    start = Input.readChar("Scegli un'opzione"); 
    
    switch (start) { 				 				
    case 'i': 				 				
    String[] arrayvoti = Input.readSeq("Inserisci voti: ", "> "); 				 			break; 			 			 			 			
    
    case 's':  					 		
    
    System.out.println(arrayvoti);
    			 			break; 			 			 			 			
    
    case 'm':
    break; 
    			 			 			 			
    case 'e': 				 				
    for (int j = 0; j<arrayvoti.length; j++) {
     					 					
    end = true; 				
    } 			 			
    } 			 			 		} 			 			  		 		 		 	
    } 	 	  
    }
    Quando però vado a compilare, mi dice "variable arrayvoti might not have been initialized
    ".
    Ma io non la inizializzo quando faccio String [] arrayvoti = Input.readSeq("Inserisci voti: ", "> "); ?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Sì, ma lo stai dichiarando ed inizializzando all'interno di un ramo dello switch... nessuno può garantire che quel ramo venga effettivamente eseguito prima degli altri (a dirla tutta, nessuno può garantire che quel ramo venga affatto eseguito), quindi nessuno ha la garanzia che negli altri rami tu vada effettivamente ad usare un array inizializzato.

    Devi dichiarare ed inizializzare l'array fuori dal blocco switch. Poi lo puoi utilizzare al suo interno.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie mille Lele, sempre pronto ad aiutarmi :-)
    Adesso infatti compila correttamente!

    Però quando vado ad eseguire non mi stampa correttamente i voti. :-(

    Ho fatto un for x stampare il contenuto dell'array voti:

    case 's':
    System.out.print("[ ");
    for (int i = 0; i < arrayvoti.length; i++)
    System.out.print(arrayvoti[i] + " ");
    System.out.println("]");
    break;

    Il problema è che mi stampa SOLO gli ultimi voti inseriti, se avevo inserito dei voti prima non me li considera.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Io non so cosa faccia la classe Input (posso intuirlo, ma non ne ho il sorgente). In più non so cosa intendi con "se avevo inserito dei voti prima". Chiaramente, ogni volta che tu decidi di inserire dei voti (scegliendo la " i " dal menu), l'array viene creato nuovo. Se non è questo il comportamento che vuoi ottenere, allora dovrai rivedere il programma in modo che vada a salvare da qualche parte i voti già inseriti prima di ri-generare un nuovo array.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Ho capito, quindi devo creare un array extra dove memorizzare tutti i voti (tutti gli array) che inserisco ogni volta che premo I. Ce la farò...

    Ultima cosa, per la media ho fatto:

    case 'm':
    int somma = 0;
    for (int i = 0; i < arrayvoti.length; i++)
    somma = somma + arrayvoti[i];
    int media = (somma/arrayvoti.length);
    System.out.print(media);

    break;

    Ma quando compilo mi dice giustamente che i tipi sono incompatibili, infatti l'array è di tipo String: String[] arrayvoti = Input.readSeq("Inserisci voti: ", "> ");

    Come posso risolvere? Ho provato a cambiare il tipo di array in int ma non sembra funzionare...

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.