Aiuto esercizio

di il
20 risposte

20 Risposte - Pagina 2

  • Re: Aiuto esercizio

    xneo ha scritto:


    Come lo scriveresti???
    sarebbe questo ma sinceramente non saprei come riempirlo, il metodo equals() l'ho sempre usato direttamente per confrontare stringhe nel momento in cui mi serviva
     public boolean equals(Object obj) {
    		     return true;
    		 
    		 }
    		 
  • Re: Aiuto esercizio

    Ma hai letto quello che ho scritto precedentemente?
    Quand'è che due auto sono uguali (a parte il fatto in cui sono in aliasing) ?
    Due auto sono uguali quando hanno la stessa marca, lo stesso modello, lo stesso colore, la stessa cilindrata e lo stesso prezzo.
  • Re: Aiuto esercizio

    [quote="xneo"]Ma hai letto quello che ho scritto precedentemente?[quote]

    si ho letto però come faccio a confrontare con equals() una variabile di tipo double (cilindrata e prezzo) ??

    lo sto scrivendo così:
     public boolean equals(Object obj) 
    	 {
    		 Auto a = (Auto) obj;
    		 if(a != null){
    			 return (this.marca.equals(a)) && (this.modello.equals(a)) 
    //&&(this.cilindrata.equals(a)); questo come lo trasformo???
    	 }
    		 return false ;
    		 
    		 }
  • Re: Aiuto esercizio

    Quel codice che hai postato fa acqua da tutte le parti.

    Punto 1. Se due oggetti sono in aliasing significa che sono uguali, quindi this==obj dovrebbe restituire true, altrimenti false. Con questa uguaglianza ti copri anche nel caso in cui obj sia null.

    Punto 2. Cosa succede se l'Object che passi ad equals() non è un'oggetto istanza di Auto??
    Ti ritrovi una bella eccezione
     ClassCastException
    Punto 3. Per confrontare i double o li wrappi in oggetti Double oppure ti scrivi un metodino
    sufficientementeProssimi(double a, double b, double eps)
    che restituisce true se il valore assoluto di a-b sia minore di eps.
    Cioè. se scrivo:
    double a=5000.00005
    double b=5000.00007
    double eps=0.0001.
    
    sufficientementeProssimi(a,b,eps)
    //restituisce true
    Per i double che devi confrontare ti basta che eps sia 0.01.
    In questo modo confronti i double fino ai centesimi, e se dai millesimi in poi sono diversi non ti importa.

    In definitiva equals diventa:
    public boolean equals(Object obj) {
        if(this==obj) return true;
        if(!(obj istanceof Auto)) return false;
    
        Auto a=(Auto)obj; //ora puoi fare il cast in modo sicuro.
        //NB. a è sicuramente diversa da null ora.
    
         //addesso si fanno i confronti
         return marca.equals(a.marca) && modello.equals(a.modello) &&
            colore.equals(a.colore) && sufficientementeProssimi(cilindrata, a.cilindrata, 0.01) &&
            sufficientementeProssimi(prezzo, a.prezzo, 0.01);
    }
  • Re: Aiuto esercizio

    Ok credo di aver capito quindi la classe Auto adesso è completa ti scrivo il codice intero così controlli se ho scritto bene:
    
    public class Auto {
    	
    	 private String marca;
         private String modello;
         private String colore;
         private double cilindrata;
         private double prezzo;
         double a ;
    	double b ;
     	double eps ;
      
    	public Auto(String marca, String modello, String colore, double cilindrata, double prezzo){
    		
    		this.marca = marca;
    		this.modello = modello;
    		this.colore = colore;
    		this.cilindrata = cilindrata;
    		this.prezzo = prezzo;
    		
    	}
        	
        	public boolean sufficientementeProssimi(double a, double b, double eps){
        	    	
        	    	if((a-b) < eps){
        	    		return true;   	    		
        	    	}
        	    	return false;
        	    }
        	    	
    
    	public String getMarca() {
    		return marca;
    	}
    
    	public void setMarca(String marca) {
    		this.marca = marca;
    	}
    
    	public String getModello() {
    		return modello;
    	}
    
    	public void setModello(String modello) {
    		this.modello = modello;
    	}
    
    	public String getColore() {
    		return colore;
    	}
    
    	public void setColore(String colore) {
    		this.colore = colore;
    	}
    
    	public double getCilindrata() {
    		return cilindrata;
    	}
    
    	public void setCilindrata(double cilindrata) {
    		this.cilindrata = cilindrata;
    	}
    
    	public double getPrezzo() {
    		if(prezzo < 0)
    		{
    			System.out.println("Prezzo non valido: " + prezzo);
    		}
    			return prezzo;	
    	}
    
    	public void setPrezzo(double prezzo) {
    		this.prezzo = prezzo;
    	}
    
    	
    	 public String toString(){
    		  return "Marca "+modello+" Modello "+marca+" Colore "+colore+" Cilindrata "+cilindrata+" Prezzo "+prezzo;
    	  }
    
    	 public boolean equals(Object obj) {
    		    if(this==obj) return true;
    		    if(!(obj instanceof Auto)) return false;
    
    		    Auto a=(Auto)obj; //ora puoi fare il cast in modo sicuro.
    		    //NB. a è sicuramente diversa da null ora.
    		    
    		     //addesso si fanno i confronti
    		     return marca.equals(a.marca) && modello.equals(a.modello) &&
    		        colore.equals(a.colore) && sufficientementeProssimi(cilindrata, a.cilindrata, 0.01) &&
    		        sufficientementeProssimi(prezzo, a.prezzo, 0.01);
    		}
    
    }
    
    dopo questo dovremmo scrivere una classe tipo LetturaDaFile che legge il file di testo??
  • Re: Aiuto esercizio

      
    double a ;
    double b ;
    double eps 
    Spiegami il perchè queste 3 variabili dovrebbero essere degli attributi di una classe Auto.

    Il metodo sufficientementeProssimi() andrebbe scritto in una classe diversa, una classe di utilità, e dovrebbe essere statico. Se poi vuoi sporcare la classe Auto almeno dichiaralo private static.
    Tra l'altro è sbagliato.
    Punto 3. Per confrontare i double o li wrappi in oggetti Double oppure ti scrivi un metodino
    CODICE: SELEZIONA TUTTO
    sufficientementeProssimi(double a, double b, double eps)

    che restituisce true se il valore assoluto di a-b sia minore di eps.
    Anzi dovrebbe essere minore o uguale.

    Questo l'avevo già detto, mi sembra
    Nel costruttore di Auto è ancora possibile inserire una cilindrata negativa o un prezzo negativo e farla franca.
    [quote]   public double getPrezzo() {
          if(prezzo < 0)
          {
             System.out.println("Prezzo non valido: " + prezzo);
          }
             return prezzo;   
       }[/quote]
    ??????????????
Devi accedere o registrarti per scrivere nel forum
20 risposte