ciao ragazzi,
domani ho un esame di java e il prof ha messo online un po di esercizi di preparazione che mi sono messo a fare. In uno ho riscontrato un problema a cui non riesco a venire a capo.
La consegna (qui il link al testo) è creare una classe valutazione in cui si definiscono tra l'altro i metodi equals e comareTo e una classe pagella nel cui main viene popolata a codice una collection che rappresenta una pagella in cui ovviamente i voti non vanno ripetuti.
questo è quello che ho fatto:
valutazione.java
pagella.javacodice:public class valutazione implements Comparable<valutazione>{ public String materia=""; public int voto = 1; public valutazione(String materia, int voto){ this.materia = materia; this.voto = voto; } public String toString(){ return this.materia+" "+this.voto; } public boolean equals(valutazione v){ if((this.materia==v.materia)&&(this.voto==v.voto)) return true; else return false; } public int compareTo(valutazione v){ final int BEFORE = -1; final int EQUAL = 0; final int AFTER = 1; if(this.equals(v)) return EQUAL; if(this.voto==v.voto){ return this.materia.compareTo(v.materia); } if(this.voto>v.voto) return AFTER; else return BEFORE; } }
compila ed esegue senza eccezioni ma di fatto non funziona perchè inserisce valori duplicati.codice:import java.util.*; class pagella{ public static void main(String[] args){ List<valutazione> pagella = new ArrayList<valutazione>(); //System.out.println((new valutazione("prova",1)).equals(new valutazione("prova",2))+"\n"); valutazione val = new valutazione("storia", 7); if( !pagella.contains(val)) pagella.add(val); val = new valutazione("italiano", 8 ); if( !pagella.contains(val)) pagella.add(val); val = new valutazione("inglese", 7 ); if( !pagella.contains(val)) pagella.add(val); val = new valutazione("francese", 5 ); if( !pagella.contains(val)) pagella.add(val); val = new valutazione("inglese", 7 ); // duplicato ! if( !pagella.contains(val)) pagella.add(val); val = new valutazione("matematica e geometria", 6 ); if( !pagella.contains(val)) pagella.add(val); val = new valutazione("italiano", 8 ); // duplicato ! if( !pagella.contains(val)) pagella.add(val); val = new valutazione("storia", 7 ); if( !pagella.contains(val)) pagella.add(val); val = new valutazione("scienze", 7 ); if( !pagella.contains(val)) pagella.add(val); val = new valutazione("latino", 5 ); if( !pagella.contains(val)) pagella.add(val); val = new valutazione("grammatica", 5 ); if( !pagella.contains(val)) pagella.add(val); val = new valutazione("filosofia", 8 ); if( !pagella.contains(val)) pagella.add(val); //System.out.println(pagella.contains(val)); Collections.sort(pagella); for(valutazione v : pg) System.out.println("\t"+v); } }
ho letto la documentazione ci collection.contains() e c'è scritto che per vedere se l'elemento è contenuto usa il metodo equals quindi ho ricontrollato quello ma lui funziona, se faccio la prova prima di stampare la collection o con valori nuovi mi da true quando deve e false quando deve....
non riesco proprio a capire, dovrebbe essere un esercizio semplice eppure...
se qualcuno riesce a spiegarmi dove sbaglio mi salva l'esame di domani (e fidatevi che ne ho bisogno ahhaa)! :P

Rispondi quotando