Pagina 2 di 5 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 48

Discussione: [JAVA] Aiuto programma

  1. #11
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    No... Il nome del metodo dev'essere equals. Se l'oggetto con il quale confronti e' di tipo Conduttura e tutte le variabili sono uguali, allora restituisci true. In caso contrario restituisci false. Ad esempio.
    codice:
    public boolean equals(Object o) {
       if (o instanceof Conduttura) {
          Conduttura c = (Conduttura) o;
          if (this.lunghezza==o.getLunghezza && 
              this.partenza.equals(o.getPartenza())&&
              this.arrivo.equals(o.getArrivo())) return true;
        }
        return false;
    }
    Per l'hashCode, devi creare una funzione che ti restituisca un intero. Per specifiche due oggetti che restituiscono true se confrontati con il metodo equals, devono avere lo stesso hashCode. Siccome equals e' calcolato in base alle variabili, anche hashCode dev'essere una funzione calcolata in base alle variabili. Puoi usare le operazioni che preferisci, basta che la funzione restituisca un intero uguale per classi uguali.

  2. #12
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    37
    Pensi che il codice per intero possa andare bene così?:
    package fogna;


    public class Conduttura {
    private double lunghezza;
    private Pozzetto partenza;
    private Pozzetto arrivo;
    public Conduttura(double l, Pozzetto p, Pozzetto a) {
    lunghezza=l;
    partenza=p;
    arrivo=a;
    }
    public double getLunghezza() {
    return lunghezza;
    }
    public Pozzetto getPartenza(){
    return partenza;
    }
    public Pozzetto getArrivo(){
    return arrivo;
    }
    public String toString() {
    return ""+partenza+","+arrivo+","+lunghezza;

    }
    boolean stessaClasse(Object o){
    if(o==null)
    return false;
    return this.getClass()!=o.getClass();
    }
    public int hashCode() {
    Double b= new Double(this.lunghezza);
    return b.hashCode();
    }
    public Object clone() {
    try{
    return super.clone();
    }
    catch(CloneNotSupportedException e) {
    return null;
    }
    }
    }
    ma per indicare che il pozzetto scarica fuori dalla rete dovrei lanciare 1 eccezione, esattamente dove? o 1 if(arrivo==null), nel metodo get?

  3. #13
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Leggi il post sopra per stessaClasse(che devi chiamare equals). HashCode rispetta le specifiche (anche un semplice return 0; lo farebbe), ma solitamente si usano funzioni che minimizzano il piu' possibile i casi in cui 2 oggetti diversi abbiano lo stesso hashcode. Prova a ideare una funzione che coinvolga tutte e tre le variabili. Il clone fatto in quel modo non va bene, per ora lascialo in bianco,ci torniamo in seguito. Intanto sistema il resto.

  4. #14
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    37
    per L'hashCode non ne ho proprio idea, ho sempre confrontato 2 interi o 2 double, mai capitate 3 variaili, ma soprattutto non saprei come comportarmi col tipo "Pozzetto"

  5. #15
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Pozzetto avra' anche lui il suo bel metodo hashCode che restituisce un intero. Ricavi tre interi dalle tre variabili e poi ci fai una funzione. (Ad es dati int a,b,c puoi fare return (a^b^c)).

  6. #16
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    37
    ma il codice che ho scritto è totalmente sbagliato? perchè visto che ho 1 variabile di tipo double pensavo di dover utilizzare la classe Double per passare a 1 intero
    ho provato a fare:
    public int hashCode() {
    Double b= new Double(this.lunghezza);
    Pozzetto c= new Pozzetto(this.partenza);
    Pozzetto d= new Pozzetto(this.arrivo)
    è sbagliato? Anche perchè non saprei che mettere nel return
    (lo so, sono 1 caso disperato )

  7. #17
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Non e' sbagliato. Si puo' solo far di meglio. E visto che il meglio consiste in scrivere 3 righe in piu' e siamo qua per imparare, non vedo perche' non provare.
    Con quello che hai scritto hai ottenuto un intero da un double, ok? Lo salvi in una variabile. Salvi l'hashcode dei due pozzetti(int b = partenza.hashcode(); int c=arrivo.hashCode()) in altre due variabili e restituisci un intero calcolato in funzione dei tre valori.

    P.s. Se posso chiedere, questo esercizio che stai facendo dove l'hai preso?

  8. #18
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    37
    Dall'ultimo esame dato, e lo "starei" preparando, solo che gli esercizi sono diventati + complicati negli ultimi 2 anni (complicati per me solamente credo )
    comunque avevo anche pensato a 1 cosa del genere:
    public int hashCode() {
    int ris=5;
    Double b= new Double(this.lunghezza);
    ris=ris*7lunghezza.hashCode();
    ris=ris*7partenza.hashCode();
    ris=ris*7arrivo.hashCode();
    return ris;

  9. #19
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Allora facendo ris = blablabla, ogni volta assegni un valore diverso perdendo i precedenti.
    Inoltre, spero sia un errore di digitazione, 7partenza non esiste, al max 7*partenza. Non puoi chiamare l'hashCode da lunghezza che e' di tipo double, puoi farlo pero da b che e' di tipo Double (con la maiuscola).
    codice:
    public int hashCode() {
       Double l = new Double(this.lunghezza);
       int a = l.hashCode();
       int b = this.partenza.hashCode();
       int c = this.arrivo.hashCode();
       return //Funzione di a, b, c;
    }

  10. #20
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    37
    public int hashCode() {
    Double l = new Double(this.lunghezza);
    int a = l.hashCode();
    int b = this.partenza.hashCode();
    int c = this.arrivo.hashCode();
    return 5*l.hashCode()+7*partenza.hashCode()+7*arrivo.hash Code();
    la funzione potrebbe andare?
    scusa se ti sto facendo perdere tempo ._.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.