|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
[java] macello con un es sulle mappe con oggetti....
mi è stato rifilato un es in cui devo scrivere un prog che tramite una mappa (Map o HashMap e uguale) gestisca i nomi degli studenti(kiavi) associati al loro voto(valori)....bisogna inserire, togliere, modificare e stampare il tutto e fin qui è una cazzatella ma ci sono cose che mi sfuggono:
1) la stampa la vuole ordinata per nome (sia chiavi che valori sono stringhe) e io non ho saputo pensare a come fare......ho provato a copiazzare e aggiustare malamente, diciamo sta roba qui: ----------------------------------------------------------- private static void stampa(Map m) { Set keySet = m.keySet(); Iterator iter = keySet.iterator(); while (iter.hasNext()) { Object key = iter.next(); Object value = m.get(key); System.out.println(key + ": " + value); } } ------------------------------------------------------------- ma non ho ancora il cervello per pensarmi a come fare ad accedere alle chiavi e stampare solo quelle (deve essere una stronzata pero ne sono sicuro) la mia classe e cosi: classe registrovoti{ main{ ...... } .... metodo stampa } 2)l esercizio seguente dice di modificare il tutto in modo che ogni chiave sia un istanza di una classe studente (quindi un oggetto che contiene nome, cognome, id, ecc....).......e qui sorgono i problemi perche io mi faccio la mia stupidissima classe studente e mannaggia li pescetti non riesco manco a far funziare l aggiungi!!!! ecco la cagata che ho pensato: --------------------------------------------------- import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Iterator; import java.util.Set; /** Classe Registro che serve per archiviare gli studenti e iloro voti mediante una mappa; il registro permette di inserire, rimuovere modificare e stampare studenti e rispettivi voti */ public class RegistroTest2 { public static void main(String[] args) { /** nella variabile di tipo map si memorizzeranno le keys e i valori che sono i nomi e i voti di studenti; con il registro è possibile effettuare operazioni di aggiunta rimozione degli studenti e modifica dei voti, oltreche stampare l elenco ordinato per nome degli studenti (coi rispettivi voti) */ Map registro = new HashMap(); String nome; String cognome; int id=0; String voto; String input; boolean done = false; BufferedReader console = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Scegli un opzione dal menu': "); System.out.println(""); visualizza(); while(done==false) { try { input = console.readLine(); int scelta = Integer.parseInt(input); if(scelta == 1 && !(scelta>5)) { System.out.print("Inserisci il nome dello studente: "); nome = console.readLine(); System.out.print("Inserisci il cognome dello studente: "); cognome = console.readLine(); System.out.print("l' id e' automatico! \n"); id = id+1; Student nomeKey = new Student(nome, cognome, id); //--------------------------------- System.out.print("Inserisci il voto dello studente: "); voto = console.readLine(); registro.put(nomeKey,voto); System.out.println(nomeKey.id); System.out.print("Studente aggiunto;\n"); } if(scelta == 2 && !(scelta>5)) { if(registro.isEmpty() != true) { System.out.print("Inserisci il cognome dello studente da rimuovere: "); cognome = console.readLine(); registro.remove(cognome); System.out.print("Studente rimosso;\n"); } else System.out.println("Non posso rimuovere nessuno studente, il registro e' vuoto!\n"); } /**if(scelta == 3 && !(scelta>5)) { String newVoto; System.out.print("Di quale studente vuoi modificare il voto? "); nomeKey = console.readLine(); if(registro.containsKey(nomeKey) == true) { System.out.print("Inserisci il nuovo voto: "); newVoto = console.readLine(); registro.put(nomeKey,newVoto); System.out.print("Il voto di "+nomeKey+" e' stato modificato in "+newVoto+"\n"); } else System.out.print("Lo studente "+nomeKey+" non e' presente nel registro\n"); }*/ if(scelta == 4 && !(scelta>5)) { if(registro.isEmpty() == true) System.out.println("Il registro e' vuoto!!"); else { stampa(registro); System.out.print("\n"); } } if(scelta == 5 && !(scelta>5)) { visualizza(); } if(scelta == 0 && !(scelta>5)) { done = true; System.out.println("Sei uscito dal programma.\n"); } } catch(IOException exception2) { System.out.println("Errore di input " + exception2); } catch(NumberFormatException exception1) { System.out.println("Non hai inserito un intero!! "+exception1); } } System.exit(0); } private static void visualizza() { System.out.println("--------------------------- "); System.out.println("1 Aggiundi Studente"); System.out.println("2 Rimuovi Studente"); System.out.println("3 Modifica Voto Studente"); System.out.println("4 Stampa Tutti I Voti"); System.out.println("5 Visualizza Questo Menu"); System.out.println("0 USCITA"); System.out.println("---------------------------"); } private static void stampa(Map m) { Set keySet = m.keySet(); Iterator iter = keySet.iterator(); while (iter.hasNext()) { Object key = iter.next(); Object value = m.get(key); System.out.println((Student)key + ": " + value); } } //c e ancora da modificare la stampa perche sia in ordine alfaetico!!!!!!!! } ---------------------------------------------------- naturalmente devo ancora modificare tutto quello e solo il flusso di coscienza che mi è skizzato via in 20 minuti; pero con l esercizio precedente funzionava sta politica, ora anche se modifico il parametro della mappa in Object e gli butto dentro uno studente quando stampo mi stampa l indirizzo di memoria dell oggetto studente e il voto; quindi l oggetto lo crea e lo inserisce ma quando stampo non prende i campi di studente ma l indirizzo che c e nella chiave della mappa!!!! ho provato a tostringare in tutti i modi, ho provato a chiamare this.campo_dell_oggetto ma non mi fa manco accedere, quindi sono disperato perche questo semplice esercizio non riesco a farlo!!!!!!!!!!!! spero di essermi spiegato, lo spero proprio.......
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
risolto tutti e due i problemi anche se senza tanto stile: metto tutto in un TreeSet e stampo ordinato per nome nel primo caso, sovrascrivo toString() per la classe studente e invoco il metodo con (blabla.toString()).....sara bruttissimo ma funziona!!
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:44.