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
codice:
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;
	}
}
pagella.java
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);
	}
}
compila ed esegue senza eccezioni ma di fatto non funziona perchè inserisce valori duplicati.
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