Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 22
  1. #11
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Trento
    Messaggi
    13
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Tecnicamente sì. La forma della stringa risultante non è granché (si può fare meglio) ... è questione di scelte/gusti.
    Effetivamente non piace neppure a me, potrei quidi fare;
    Rettangolo[lato1=..., lato2=..., perimetro=...,cm area=...cm^2]?? Tu cosa consiglieresti?

  2. #12
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    [salto pagina]
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #13
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Trento
    Messaggi
    13
    Ricapitolando, ho corretto un po' di cose, ed ora la classe Triangolo, Cerchio, Punto, e Rettangolo dovrebbere essere giuste, ho aggiunto un nuovo metodo per trovare l'ingombro minimo per ogni classe (mi serivirà per la classe Scaffale di poligoni.

    PUNTO
    codice:
    /*
    Realizza la classe Punto con tutti i metodi che ritieni opportuni più il metodo (statico) creaCasuale()
    che crea un punto casuale e lo restituisce.
     */
    
    class Punto {
        private int x;
        private int y;
    
    
        //Costruttore
    
        public Punto() {
        }
    
        public Punto(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
        //Getter e Setter di x,y
    
        public int getX() {
            return x;
        }
    
        public void setX(int x) {
            this.x = x;
        }
    
        public int getY() {
            return y;
        }
    
        public void setY(int y) {
            this.y = y;
        }
    
        public int CalcDistanza(Punto A, Punto B){
            //Distanza tra 2 punti
            int AB = (int) Math.sqrt( Math.pow( (B.getX() - A.getX() ), 2 ) + Math.pow( (B.getY() - A.getY() ) , 2) );
            return AB;
        }
    
        //Metodo creazione punto casuale
    
        public static Punto creaCasuale() {
    
            //Crea Punto Casuale
            Punto staticPunto = new Punto( (int) (20 * Math.random()), (int) (20 * Math.random()));
    
            return staticPunto;
        }
    }
    POLIGONO
    codice:
    /*
    Successivamente crea la superclasse astratta Poligono che ha i
    metodi getPerimetro () e getArea(). Da questa classe derivano le classi Cerchio, Rettangolo e Triangolo.
     */
    abstract class Poligono {
    
        //Metodi astratti
    
        public abstract double getPerimetro();
        public abstract double getArea();
        public abstract double ingombroMin();
    
    }
    RETTANGOLO
    codice:
    /*
    Per ciascuna di queste classi, dopo avere realizzato i metodi che ritieni opportuni, realizza un metodo statico
    creaCasuale() che crea un oggetto con valori a caso e lo restituisce.
     */
    class Rettangolo extends Poligono{
        private double AB, BC;
    
        //Costruttori
    
        public Rettangolo (double AB, double BC){
            this.AB = AB;
            this.BC = BC;
        }
    
        public double getAB() {
            return AB;
        }
    
        public double getBC() {
            return BC;
        }
    
        //Metodi Perimetro e Area
    
        @Override
        public double getPerimetro() {
            return (AB + BC) * 2;
        }
    
        @Override
        public double getArea() {
            return AB * BC;
        }
    
        //Metodo Static creaCasuale
    
        public static Rettangolo creaCasuale() {
            //Creo Rettangolo casuale
    
            Rettangolo RetCasuale = new Rettangolo((20 * Math.random()) + 1, (20 * Math.random()) + 1);
    
            return RetCasuale;
        }
    
        //metodo per trovare il lato più corto
    
        public double ingombroMin(){
            double min = Math.min(getAB(),getBC());
            return min;
        }
    
        public String toString(){
            return "[Rettangolo " + "AB=" + AB + " BC=" + BC + " Perimetro=" + getPerimetro() + "cm " + "Area=" + getArea() + "cm^2]";
        }
    }
    TRIANGOLO
    codice:
    /*
    Per ciascuna di queste classi, dopo avere realizzato i metodi che ritieni opportuni, realizza un metodo statico
    creaCasuale() che crea un oggetto con valori a caso e lo restituisce.
     */
    class Triangolo extends Poligono {
        private double AB, BC, CA;
    
        //Costruttore
    
        public Triangolo(Punto A, Punto B, Punto C) {
    
            //Formula distanza tra due punti
    
            AB = A.CalcDistanza(A, B);
            BC = B.CalcDistanza(B, C);
            CA = C.CalcDistanza(C, A);
        }
    
        //Metodi getter
    
        public double getAB() {
            return AB;
        }
    
        public double getBC() {
            return BC;
        }
    
        public double getCA() {
            return CA;
        }
    
        //Metodi Perimetro e Area
    
        @Override
        public double getPerimetro() {
            return AB + BC + CA;
        }
    
        @Override
        public double getArea() {
            double halfPerimeter = (AB + BC + CA) / 2;
            return Math.sqrt(halfPerimeter * (halfPerimeter - AB) * (halfPerimeter - BC) * (halfPerimeter - CA));
        }
    
        //Metodi Static creaCasuale
    
        public static Triangolo creaCasuale() {
            //Creo i lati del Triangolo
    
            Triangolo TriCasuale = new Triangolo(Punto.creaCasuale(), Punto.creaCasuale(), Punto.creaCasuale());
    
            return TriCasuale;
        }
    
        //metodo per trovare il lato più corto
    
        public double ingombroMin(){
            double min = Math.min(getAB(),getBC());
            min = Math.min(min, getCA());
            return min;
        }
    
        public String toString(){
            return "[Triangolo AB=" + AB + " BC=" + BC + "CA= " +CA+ " Perimetro=" + getPerimetro() + "cm " + "Area=" + getArea() + "cm^2]";
        }
    }
    CERCHIO
    codice:
    /*
    Per ciascuna di queste classi, dopo avere realizzato i metodi che ritieni opportuni, realizza un metodo statico
    creaCasuale() che crea un oggetto con valori a caso e lo restituisce.
     */
    
    class Cerchio extends Poligono{
        private double radius;
        private Punto vertice;
    
        //Costruttori
    
        public Cerchio(double radius, Punto vertice) {
            this.vertice = vertice;
            this.radius = radius;
        }
    
        //Metodi getter
    
        public double getRadius() {
            return radius;
        }
    
        public Punto getVertice() {
            return vertice;
        }
    
        //Metodo Area e Perimetro
    
        @Override
        public double getPerimetro() {
            return 2 * radius *  Math.PI;
        }
    
        @Override
        public double getArea() {
            return Math.pow(radius,2.0) *  Math.PI;
        }
    
        //Metodi Statici
    
        public static Cerchio creaCasuale() {
    
            Cerchio CerCasuale = new Cerchio(((20 * Math.random()) + 1), Punto.creaCasuale());
    
            return CerCasuale;
        }
    
        //metodo per trovare il lato più corto
    
        public double ingombroMin(){
           return radius*2;
        }
    
        public String toString(){
            return "[Cerchio " + "V(" + vertice.getX()+","+ vertice.getY()+")" + " r=" + radius + " Perimetro=" + getPerimetro() + "cm " + "Area=" + getArea() + "cm^2]";
        }
    }
    a questo punto ho iniziato l'ultima classe ossia
    codice:
    /*
    Realizza infine la classe ScaffaleDiPoligoni che è una collezione di (massimo) dieci poligoni sistemati in modo da
    occupare meno spazio possibile (i triangoli e i rettangoli sono poggiati sul lato più corto, le circonferenze
    occupano lo spazio del loro diametro: si trascuri l'eventuale contatto tra i poligoni al di sopra della retta presa in
    considerazione).
    I metodi di questa classe sono: getPorzioneOccupata(), getTotPoligoni(), getPoligono(i), sistemaPoligono(p),
    toString(). Il primo metodo restituisce la misura dello scaffale occupata. Il metodo getTotPoligoni() restituisce
    un intero tra 0 e 10 che rappresenta la quantità di poligoni già sistemati sullo scaffale. Il metodo getPoligono(i)
    restituisce un puntatore al poligono inserito in posizione i-esima. Il metodo sistemaPoligono(p) posiziona nel modo più
    opportuno il poligono sullo scaffale. Il metodo toString() presenta un elenco dei poligono inseriti sullo scaffale; di
    ciascun poligono si presenterà il tipo (Triangolo, Rettangolo, Cerchio), le sue caratteristiche
    (i vertici o il centro con il raggio) ed infine l'ingombro.
    */
    class ScaffaleDiPoligoni {
        private double shelf;
        private Poligono [] vetPoligoni = new Poligono [10];
        private int cnt = 0;
    
        //Costruttore
        public ScaffaleDiPoligoni(){}
    
        //Metodi
    
        public void sistemaPoligono(Poligono form){
    
                vetPoligoni[cnt] = form;
                cnt++;
                shelf += form.ingombroMin();
    
        }
    
        public int getTotPoligoni() {
            return cnt;
        }
    
        public int getPorzioneOccupata(){
            return (int) shelf;
        }
    
        public Poligono getPoligono(int i){
            return vetPoligoni[i];
        }
    
    
        public String toString(){
            for(int i=0; i <= cnt; i++) {
                return vetPoligoni[i].toString();
            }
        }
    }
    funziona tutto (non so se sia consettualmente corretto e chiaro), tranne il toString che deve restiture la lista dei poligoni inseriti, ho provato a farlo ma non funziona poichè restituisce un errore al return.
    1. In che altro modo lo posso fare??
    2. Dovrei teriocamente sulla classe, getPoligono, sistemaPoligono gestire delle eccezioni in caso l'array sia pieno oppure si richieda un elemento di indice i non presente?

  4. #14
    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

  5. #15
    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
    codice:
        public String toString(){
            for(int i=0; i <= cnt; i++) {
                return vetPoligoni[i].toString();
            }
        }
    E questo è sbagliato concettualmente, oltre al fatto che non compila proprio. Il compilatore non sa quale sarà il flusso di esecuzione del metodo toString a runtime. Sa però che il for ha una condizione che in teoria "potrebbe" essere subito false e quindi il corpo potrebbe non venire neanche eseguito. E il metodo resterebbe sguarnito di un return, che invece ci deve essere.

    Il for ti serve ma per comporre una stringa, non per restituire subito una stringa!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #16
    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")

  7. #17
    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

  8. #18
    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 è?

  9. #19
    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

  10. #20
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Trento
    Messaggi
    13
    Quote Originariamente inviata da andbin Visualizza il messaggio
    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 !).
    ho corretto mettendo i<cnt, uso cnt perchè il mio array di vettori può non essere full.. Ho commesso un errore veramente banale =). Adesso cerco di rivedere i nomi dei metodi ecc. Poi per il resto dovrebbe essere tutto coretto!!

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