Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 22

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Non ho letto tutto tutto (non ho molto tempo ora, vedrò magari stasera) ma ..... purtroppo non è tutto corretto. Il CalcDistanza in Punto NON va bene.
    La questione è che CalcDistanza è un metodo "di istanza". Un metodo di istanza si presuppone, in generale, che vada ad usare lo "stato" dell'oggetto su cui il metodo è invocato.

    Ora, che tu faccia es. (p1 / p2 / pA / pB sono 4 oggetti Punto distinti)

    p1.CalcDistanza(pA, pB)

    oppure

    p2.CalcDistanza(pA, pB)

    che differenza c'è? Invochi CalcDistanza su due oggetti, p1 e p2. Ma il loro stato NON lo usi. E quindi purtroppo così NON ha senso.

    Le soluzioni sono due:

    1) Rendi static il metodo CalcDistanza. In questo modo diventa un metodo di "utilità", slegato da qualunque istanza di Punto. Per invocarlo si dovrebbe usare il nome della classe:

    Punto.CalcDistanza(pA, pB)

    2) Cambi la forma del metodo (soluzione che è più Object-Oriented):

    public int CalcDistanza(Punto altroPunto) {

    E quale è l'altro punto? Semplicemente è il this, l'oggetto su cui il metodo è invocato!


    P.S. inoltre segui meglio le convenzioni sui nomi.

    P.S.2: perché la distanza è come int? La distanza è molto più probabile che sia non intera.
    Ultima modifica di andbin; 16-11-2016 a 19:39
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Trento
    Messaggi
    13
    Quote Originariamente inviata da andbin Visualizza il messaggio

    2) Cambi la forma del metodo (soluzione che è più Object-Oriented):

    public int CalcDistanza(Punto altroPunto) {

    E quale è l'altro punto? Semplicemente è il this, l'oggetto su cui il metodo è invocato!
    Così????
    codice:
    public double CalcDistanza(Punto altropunto){
        //Distanza tra 2 punti
    double AB = Math.sqrt( Math.pow( (this.getX() - this.getX() ), 2 ) + Math.pow( (altropunto.getY() - altropunto.getY() ) , 2) );
        return AB;
    }
    P.S. inoltre segui meglio le convenzioni sui nomi.
    Potresti farmi qualche esempio?

    Il for ti serve ma per comporre una stringa, non per restituire subito una stringa!
    Ho provato a farlo, ma non riesco a proprio a capire...ufff...
    Ho provato così creando una stringa, ma e logicamente errato, anche funzionando (NON funziona)
    codice:
    public  String toString(){
        for(int i=0; i <= cnt; i++) {
            stringa =  vetPoligoni[i].toString();
    }
        return stringa;
    }
    Ho provato, poi con un array di stringhe, ma non va bene perchè l ritorno di un array di stringhe non è compatibile con il metodo toString.....
    Probabilmente mi manca qualche concetto, come per la classe CalcDistanza (dove non sapevo che potevo utilizzare il this, senza specificare l' "argomento")

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da megaorso Visualizza il messaggio
    Così????
    codice:
    public double CalcDistanza(Punto altropunto){
        //Distanza tra 2 punti
    double AB = Math.sqrt( Math.pow( (this.getX() - this.getX() ), 2 ) + Math.pow( (altropunto.getY() - altropunto.getY() ) , 2) );
        return AB;
    }
    Non ancora. Devi fare la differenza di X e di Y tra i due punti ... non sullo stesso punto!

    Quote Originariamente inviata da megaorso Visualizza il messaggio
    Potresti farmi qualche esempio?
    Nomi di classi in camel-case con iniziale maiuscola es. TriangoloRettangolo
    Nomi di metodi in camel-case con iniziale minuscola es. toString() setNome()
    Nomi di variabili in camel-case con iniziale minuscola es. annoDiNascita
    Nomi di costanti tutte in maiuscolo con underscore in mezzo es. MAX_VALUE

    Quote Originariamente inviata da megaorso Visualizza il messaggio
    codice:
    public  String toString(){
        for(int i=0; i <= cnt; i++) {
            stringa =  vetPoligoni[i].toString();
    }
        return stringa;
    }
    E cosa è stringa? Dovrebbe essere una variabile ... dove la vedi dichiarata?
    Appunto, nel toString definisci una variabile, inizialmente vuota ( "" ) a cui accodi man mano i dati. Poi alla fine la restituisci.


    P.S. non postare codice "colorato" perché è un casino leggerlo con i tag dei colori e anche quotarlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Trento
    Messaggi
    13
    Quote Originariamente inviata da andbin Visualizza il messaggio
    E cosa è stringa? Dovrebbe essere una variabile ... dove la vedi dichiarata?
    Appunto, nel toString definisci una variabile, inizialmente vuota ( "" ) a cui accodi man mano i dati. Poi alla fine la restituisci.

    .
    L'avevo dichiarata nella classe ScaffaleDiPoligoni!!!!

    comunque
    codice:
        public  String toString(){
            String stringa = "";
            for(int i=0; i <= cnt; i++) {
                stringa +=  vetPoligoni[i].toString() +"\n";
            }
            return stringa;
        }
    nel main faccio
    codice:
    public class Test {
        static public void main (String args[]){
            ScaffaleDiPoligoni AAA = new ScaffaleDiPoligoni();
            AAA.sistemaPoligono(Triangolo.creaCasuale());
            AAA.sistemaPoligono(Rettangolo.creaCasuale());
            AAA.sistemaPoligono(Cerchio.creaCasuale());
            System.out.println(AAA.getPoligono(1));
            System.out.println(AAA.getPoligono(2));
            System.out.println(AAA.getPoligono(0));
            System.out.println(AAA.getPorzioneOccupata());
            System.out.println(AAA.toString());
    
        }
    }
    mi restituisce un errore
    codice:
    Exception in thread "main" java.lang.NullPointerException
        at ScaffaleDiPoligoni.toString(ScaffaleDiPoligoni.java:48)
    [Rettangolo AB=5.99083586722723 BC=1.0842254238268625 Perimetro=14.150122582108185cm Area=6.4954165572216125cm^2]
        at Test.main(Test.java:15)
    [Cerchio V(18,13) r=20.121548553595435 Perimetro=126.4274182296515cm Area=1271.9577172068246cm^2]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [Triangolo AB=7.280109889280518 BC=5.0990195135927845CA= 9.219544457292887 Perimetro=21.59867386016619cm Area=18.500000000000004cm^2]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    46
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
    che tipo di errore è?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da megaorso Visualizza il messaggio
    mi restituisce un errore
    Exception in thread "main" java.lang.NullPointerException
    at ScaffaleDiPoligoni.toString(ScaffaleDiPoligoni.jav a:48)
    Stai cercando di invocare qualcosa su un reference null. E presumo che sia per un null all'interno dell'array vetPoligoni.

    E il punto è: perché hai fatto i <= cnt ? Se cnt è il numero totale di elementi validi, allora non può essere inclusivo (se hai 7 elementi validi, gli indici vanno da 0 a 6 ... non da 0 a 7 !).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Trento
    Messaggi
    13
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Nomi di classi in camel-case con iniziale maiuscola es. TriangoloRettangolo
    Nomi di metodi in camel-case con iniziale minuscola es. toString() setNome()
    Nomi di variabili in camel-case con iniziale minuscola es. annoDiNascita
    Nomi di costanti tutte in maiuscolo con underscore in mezzo es. MAX_VALUE
    corretto CalcDistanza ==> calDistanza e i vari Ret/Tri/CerCasuale ==> ret/tri/cerCasuale

    unico dubbio i vari AB, li faccio ab?
    Ultima modifica di megaorso; 17-11-2016 a 18:04

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da megaorso Visualizza il messaggio
    unico dubbio i vari AB, li faccio ab?
    Dovessi scriverli io, e in italiano, li metterei latoAB o segmentoAB
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Tag per questa discussione

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.