PDA

View Full Version : [java] macello con un es sulle mappe con oggetti....


dnarod
08-12-2003, 17:58
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.......

dnarod
08-12-2003, 21:28
upp

dnarod
09-12-2003, 02:31
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!!