Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Dubbio su l'uso di equals

    Ciao

    Ho scritto una classe Match che memorizza un riscontro di una parola di un puzzle costituito da una matrice NxM.
    Variabili di istanza della classe sono la parola (String), le coordinate riga, colonna del ritrovamento della parola nel puzzle, la direzione di sviluppo (Nord, Est, Sud.....)

    Ho scritto il metodo equals che confronta due oggetti Match verificando se hanno parole uguali:

    codice:
    @Override
    	public boolean equals(Object o){
    		if(o==this) return true;
    		if(o==null) return false;
    		if(!(o instanceof Match)) return false;
    		Match riscontro = (Match) o;
    		return(this.parola.equals(riscontro.parola));
    	}
    Successivamente mi sono creato una classe astratta che estende un interfaccia di nome Elenco dotata di metodi che "lavorano" su oggetti Match.

    Ho concretizzato un metodo di nome public boolean ricercaMatch(String parola) che ricerca appunto un match relativo ad un’assegnata parola (string).
    Ho dei dubbi però sull'uso di equals in questo metodo

    codice:
    @Override
    	public boolean ricercaMatch(String parola){
    		Iterator<Match> it = this.iterator();
    		while(it.hasNext()){
    			Match mt = it.next();
    			if(mt.getParola().equals(parola))
    				return true;
    		}
    		return false;
    	}
    Come parametro di equals ho inserito un campo String.
    Va bene cosi?
    Oppure dovevo inserire come parametro un oggetto Match in accordo a l'equals che ho scritto all'inizio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Bhe, dovresti passare il Match. Infatti nel tuo equals() hai proprio controllato che si tratti di un oggetto Match.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Potresti spiegarti meglio?
    magari mi fai un esempio con il codice?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    codice:
    if(mt.getParola().equals(parola))
    cosi stai utilizzando il metodo equals della classe string, non il "tuo" metodo equals. Se vuoi utilizzare il "tuo" metodo equals devi passare in input un oggetto match,insomma dovresti fare qualcosa del genere:

    if(mt.equals(mtdaconfrontare))

    anche se in questo caso mi pare la stessa identica cosa visto che il "tuo" metodo equals non fa nient'altro che confrontare la variabile parola.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quindi il codice è giusto ?

    codice:
    @Override
    	public boolean ricercaMatch(String parola){
    		Iterator<Match> it = this.iterator();
    		while(it.hasNext()){
    			Match mt = it.next();
    			if(mt.getParola().equals(parola))  
    				return true;
    		}
    		return false;
    	}
    Sennò avrei potuto utilizzare il metodo compareTo anzichè l'equals per vedere se le parole sono uguali?

    codice:
    @Override
    	public boolean ricercaMatch(String parola){
    		Iterator<Match> it = this.iterator();
    		while(it.hasNext()){
    			Match mt = it.next();
    			if((mt.getParola().compareTo(parola))==0) return true;
    				
    		}
    		return false;
    	}
    che dici?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Il metodo compareTo() ti dice se è minore, maggiore o uguale. A te serve sapere se gli oggetti sono uguali, quindi va bene equals().

    Non so com'è formata Match, per questo ti dicevo che non era proprio corretto.
    Se ad esempio in Match hai solamente una Stringa, allora puoi confrontare direttamente le 2 stringhe tramite equals(), ma se nella tua classe non c'è solo una stringa ma anche altro non è una buona idea confrontare l'oggetto String con Match.

    In poche parole, se vuoi sapere se 2 oggetti Match sono uguali, passa 1 oggetto match (ed ovviamente deve essere Match anche il chiamante).

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.