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