Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    Problema Collection (urgente)

    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

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Problema Collection (urgente)

    Non c'è nulla di urgente sul forum...

    Originariamente inviato da ultimateshadow
    se qualcuno riesce a spiegarmi dove sbaglio mi salva l'esame di domani (e fidatevi che ne ho bisogno ahhaa)! :P
    Per iniziare riguardati come si confrontano due oggetti, in particolare guarda come verifichi l'uguaglianza tra materia e v.materia.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    scusami è che sono con l'acqua alla gola, il problema è sull' == quindi? dovevo fare .equals()?

  4. #4

    Re: Problema Collection (urgente)

    Originariamente inviato da ultimateshadow
    codice:
    ...
    	public boolean equals(valutazione v){
    		if((this.materia==v.materia)&&(this.voto==v.voto))
    			return true;
    		else
    			return false;
    	}
    ...
    materia è una istanza della classe String, quindi per confrontre istanze/oggetti devi usare equals e non ==.

  5. #5

    Re: Re: Problema Collection (urgente)

    Originariamente inviato da VincenzoTheBest
    materia è una istanza della classe String, quindi per confrontre istanze/oggetti devi usare equals e non ==.
    grazie! ma si può? sai che sarà almeno la seconda volta che perdo un pomeriggio x sta boiata!?

  6. #6
    l'ho messa giù così
    codice:
    public boolean equals(valutazione v){
    	if((this.materia.equals(v.materia))&&(this.voto==v.voto))
    		return true;
    	else
    		return false;
    }
    ma continua a non funzionare....

  7. #7

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Devi fare l'override di equals, non l'overloading!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema Collection (urgente)

    Originariamente inviato da ultimateshadow
    codice:
    	public boolean equals(valutazione v){
    		if((this.materia==v.materia)&&(this.voto==v.voto))
    			return true;
    		else
    			return false;
    	}
    Occhio: il "vero" equals, quello che permette di fare l'override è

    public boolean equals(Object obj)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    ma se faccio l'override con Object poi come accedo ai campi della classe valutazione? se faccio obj.materia mi dar un errore immagino e fare l'override con equals (valutazione v) (sn csì stupido che ci ho dovuto provare -.-) mi dice hce non fa l'override su nessun metodo preesistente perchè in effeti non ne esistono con quella segnatura....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.