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

    [JAVA] Uguaglianza profonda

    codice:
    public boolean equals(Object o){  
    
    if(o==null){ 
    
    return false; 
    
    }   
    
    if (o != null && getClass().equals(o.getClass())){  
    
    Traghetto a=(Traghetto) o;
    
     return (fermate.equals(a.fermate))&&(nome==a.nome)&&(posti==a.posti)&&(durata=.a.durata);    
    
    } 
    
    else 
    return false;
    Salve a tutti!!!
    Questo è il codice che hoimplementato per fare l'uguaglianza profonda...il metodo complila e funziona correttamente per tutti i campi tranne che per fermate...fermate è un array di stringhe e confrontando due oggetti identici mi ritorna sempre false...cosa sbaglio come devo fare??? vi ringrazio in anticipo ciao a tutti!!!

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

    Re: [JAVA] Uguaglianza profonda

    Originariamente inviato da furfari1234
    fermate è un array di stringhe e confrontando due oggetti identici mi ritorna sempre false...cosa sbaglio come devo fare???
    Sono dichiarati String[] giusto? Ovviamente non puoi usare ==, un array è un oggetto complesso!

    edit

    E comunque Java ha una sezione dedicata
    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
    public boolean equals(Object o){

    if(o==null){

    return false;

    }

    if (o != null && getClass().equals(o.getClass())){

    Traghetto a=(Traghetto) o;

    if(fermate.length==a.fermate.length)
    for(int i=0;i<fermate.length;i++)
    if(fermate[i].equals(a.fermate[i])==false)
    return false;
    else
    return false;


    return (fermate.equals(a.fermate))&&(nome==a.nome)&&(post i==a.posti)&&(durata=.a.durata);

    }

    else
    return false;

    Ho provato con questo for ma mi da sempre false...

  4. #4
    public boolean equals(Object o){

    if(o==null){

    return false;

    }

    if (o != null && getClass().equals(o.getClass())){

    Traghetto a=(Traghetto) o;

    if(fermate.length==a.fermate.length){
    for(int i=0;i<fermate.length;i++)
    if(fermate[i].equals(a.fermate[i])==false)
    return false;
    }
    else
    return false;


    return (fermate.equals(a.fermate))&&(nome==a.nome)&&(post i==a.posti)&&(durata=.a.durata);

    }

    else
    return false;



    Mi ero scordato le parentesi xD cosi funziona!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    tu cerchi di fare l'uguaglianza tra 2 oggetti di tipo Traghetto.
    Ora per l'uguaglianza vera e propria dovresti implementare il metodo hashcode (come ben sai sei certo dell'uguaglianza quando fai il corretto override di equals e hashcode).

    Poi rivedrei un po' l'algoritmo

    codice:
    public boolean equals(Object o){  
    
    //Ok, se passi null sicuramente sono differenti
    if(o==null){ 
    
    return false; 
    
    }   
    
    //perché qui ricontrolli null? Lo hai fatto su
    //corretto il controllo della classe, classi differenti sicuramente oggetti differenti
    if (getClass().equals(o.getClass())){  
    
    Traghetto otherTraghetto = (Traghetto) o;
    
    //a questo punto devi controllare punto per punto l'uguaglianza di ogni parametro che 
    
    //lo ripeti per tutti i parametri di interesse. Logica, un parametro non valorizzato rende gli oggetti diversi
    if (this.nome == null && otherTraghetto.nome != null) return false; 
    if (this.nome != null && otherTraghetto.nome == null) return false; 
    //controlli l'uguaglianza tra i due (equals o == a seconda del tipo) 
    if (!this.nome.equals(otherTraghetto.nome) return false; 
    
    //infine hai 
    
    for (String string : fermate){
    //controlla che questa sia nell'altra struttura, puoi trovare accettabile che ci sia ma in altre posizioni oppure come ti ha fatto furfari controlli posizione per posizione. 
      
    }
    
    //arrivato qui sono uguali
    return true; 
    }
    ti consiglio di passare all'uso di collection, che ti facilitano il controllo (es. se le tue fermate stanno in un array di stringhe (arraylist) contains mi dice se la fermata è contenuta o meno facilitandoti la vita)

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.