Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] Metodo "equals" tra oggetti!

    codice:
    public class ArticoloA{
      private String nomecapo, nazioneprod;
      private int disp;
      private double prezzo;
        public ArticoloA(String name, String made, int amount, double price){
    	  this.nomecapo = name;
    	  this.nazioneprod = made;
    	  this.disp = amount;
    	  this.prezzo = price;
    	}
    	public String readname(){
    	  return this.nomecapo;
    	}
    	public String readmade(){
    	  return this.nazioneprod;
    	}
    	public int readamount(){
    	  return this.disp;
    	}
    	public double readprice(){
    	  return this.prezzo;
    	}
    	public void modprice(double newprice){
    	  this.prezzo = newprice;
    	}
    	public boolean compare(ArticoloA a, ArticoloA b){
    	  return (a.equals(b));
        }
    }
    L'esercizio mi chiede di scrivere un metodo equals che confronti due capi di abbigliamento, sono riuscito a produrre questo, quando lo compilo non mi da errori, è corretto quanto scritto oppure devo scrivere qualcosa di differente per confrontare due articoli?

    Grazie a tutti per l'attenzione!
    Tacconi Marco

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    il metodo equals ti "costringe" ad indicare i criteri secondo cui 2 oggetti sono uguali oppure no, quindi la correttezza dipende molto dalle consegne che hai, da come pensi l'oggetto e da come interagisce con gli altri.

    Il metodo compare invece "confronta" due valori restituendoti un valore positivo, negativo o zero a seconda che il primo valore segua, preceda o è uguale al secondo valore da te specificato (nel caso vuoi uguaglianza devi avere zero).

    Di equals hai una implementazione di default che confronta i riferimenti e agisce di conseguenza, come ti dicevo sta a te decidere se due oggetti sono uguali o no. Per la tua classe mi aspetto che due oggetti sono uguali quando hanno almeno uguale nome (in genere si usa un codice per identificare in maniera univoca il record), poi dipende dalle consegne come ti ho detto.

    Di compare non hai una implemetnazione di default per Object, devi seguire determinate regole, ce l'hai per le stringhe (visto che lo usi).

    Un consiglio: fissa i criteri di uguaglianza e prova a scrivere il tuo metodo equals
    RTFM Read That F*** Manual!!!

  3. #3
    Ho capito, intendi dire che dovrei andare dentro gli oggetti e vedere se ad esempio this.nome e this.nazioneprod tramite equals sono uguali?

    La consegna mi dice : definire un metodo equals per vedere se due capi d'abbigliamento sono uguali, al che mi chiedo, il metodo da me scritto confronta tutti i parametri dei due oggetti e restituisce TRUE se sono tutti uguali oppure FALSE se c'e n'è almeno uno non uguale?
    Tacconi Marco

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Esatto, ma stia attento che devi decidere tu quali sono i criteri di uguaglianza, per me basterebbe solo nome, se tu vuoi fissare tutti i parametri va bene se nel contesto in cui lo usi questo comportamento ha senso.
    RTFM Read That F*** Manual!!!

  5. #5
    codice:
    public boolean compare(ArticoloA a, ArticoloA b){
    	  return(a.nomecapo&a.nazioneprod).equals(b.nomecapo&b.nazioneprod);
    }
    Una cose del genere dovrebbe andare bene giusto? Entro nei parametri dei due oggetti e li confronto.
    Tacconi Marco

  6. #6
    No, ok scusami l'ho appena compilato e mi da errore sulla &, forse è meglio solo col parametro nome tipo :

    codice:
    public boolean compare(ArticoloA a, ArticoloA b){
    	  return a.nomecapo.equals(b.nomecapo);
    }
    E la faccio finita!
    Tacconi Marco

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    scusa devi compunque rispettare le regole del linguaggio.
    Senza andare nei dettagli,

    codice:
    public boolean equals(Object obj) {
              Articolo other = (Articolo) obj; 
              boolean ret = ( nomecapo.equals(other.nomecapo)) && ( nazione.equals(other.nazione))
    	  return ret;
    }
    ti consiglio di vedere la teoria riguardo l'uguaglianza tra oggetti (equals e hashcode), è riduttivo trattarli qui, inoltre io qui ti ho fatto una versione molto semplice del metodo equals, in realtà ci sono altre cose da considerare (che la teoria ti spiega)
    RTFM Read That F*** Manual!!!

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.