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

    Errore in creazione istanza

    Ciao a tutti,
    ho scaricato una guida di java che sto studiando e ora mi trovo in difficoltà con degli esempi
    Ho creato tre classi che vado qui di seguito a postarvi

    Le classi si trovano tutte nella stesso package
    L'esempio lo sto provando su netbeans

    l'errore che mi dà è in questo punto

    p1 = new Punto3D(p1X, p1Y, p1Z);
    p2 = new Punto3D(p2X, p2Y, p2Z);

    mi evidenzia Punto3D
    TestGeometrico.java:40: cannot find symbol
    symbol : constructor Punto3D(int,int,int)
    location: class esempijava5oo.Punto3D

    o anche provato a importare inutilmente la classe, ma nulla da fare
    Cosa sto sbagliando?


    °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°

    prima classe Main

    package esempijava5oo;
    import esempijava5oo.Punto3D;

    ss TestGeometrico {

    public static void main(String args[]) {
    /* dichiariamo le variabili locali */
    Punto p1 = null, p2 = null;
    /* testiamo se sono stati inseriti il giusto numero
    di parametri */
    if (args.length == 4) {
    //Conversione a tipo int di stringhe
    int p1X = Integer.parseInt(args[0]);
    int p1Y = Integer.parseInt(args[1]);
    int p2X = Integer.parseInt(args[2]);
    int p2Y = Integer.parseInt(args[3]);
    //Istanza dei due punti
    p1 = new Punto(p1X, p1Y);
    p2 = new Punto(p2X, p2Y);
    }
    else if (args.length == 6) {
    //Conversione a tipo int di stringhe
    int p1X = 10;//Integer.parseInt(args[0]);
    int p1Y = 12;//Integer.parseInt(args[1]);
    int p1Z = 15;//Integer.parseInt(args[3]);
    int p2X = 20;//Integer.parseInt(args[4]);
    int p2Y = 30;//Integer.parseInt(args[5]);
    int p2Z = 35;//Integer.parseInt(args[6]);
    //Istanza dei due punti
    p1 = new Punto3D(p1X, p1Y, p1Z);
    p2 = new Punto3D(p2X, p2Y, p2Z);
    }
    else {
    System.out.println("inserisci 4 o 6 parametri");
    System.exit(0); // Termina l’applicazione
    }

    //Stampa della distanza
    System.out.println("i punti distano "
    + p1.dammiDistanza(p2));

    }
    }


    °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°

    seconda classePunto

    package esempijava5oo;

    public class Punto {
    private int x, y;


    public Punto() {
    //Costruttore senza parametri
    }
    public Punto(int x, int y) {
    this.setXY(x, y); //Il this è facoltativo
    //riutilizziamo codice
    }
    public void setX(int x) {
    this.x = x; //Il this non è facoltativo
    }
    public void setY(int y) {
    this.y = y; //Il this non è facoltativo
    }
    public void setXY(int x, int y) {
    this.setX(x); //Il this è facoltativo
    this.setY(y);
    }
    public int getX() {
    return this.x; //Il this è facoltativo
    }
    public int getY() {
    return this.y; //Il this è facoltativo
    }



    public double dammiDistanza(Punto p) {
    //quadrato della differenza delle x dei due punti
    int tmp1 = (x - p.x)*(x - p.x);
    //quadrato della differenza della y dei due punti

    int tmp2 = (y - p.y)*(y - p.y);
    //radice quadrata della somma dei due quadrati
    return Math.sqrt(tmp1 + tmp2);
    }
    }

    °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°

    terza classe Punto3D

    package esempijava5oo;

    public class Punto3D extends Punto {
    private int z;

    public Punto3D() {
    //Costruttore senza parametri
    }


    public double dammiDistanza(Punto p) {
    if (p instanceof Punto3D) {
    //Chiamata ad un metodo privato tramite casting
    return this.calcolaDistanza((Punto3D)p);
    }
    else {
    return -1; //distanza non valida!
    }
    }
    private double calcolaDistanza(Punto3D p1) {
    //quadrato della differenza della x dei due punti
    int tmp1=(getX()-p1.getX())*(getX()-p1.getX());
    //quadrato della differenza della y dei due punti
    int tmp2=(getY()-p1.getY())*(getY()-p1.getY());
    //quadrato della differenza della z dei due punti
    int tmp3=(z-p1.z)*(z-p1.z);
    //radice quadrata della somma dei tre quadrati
    return Math.sqrt(tmp1+tmp2+tmp3);

    }

    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Gerarchia di classi che è concettualmente sbagliata, in quanto viola il "principio di sostituzione di Liskov" (LSP). In generale, un punto a 3 dimensioni non è e non può essere visto come un punto a 2 dimensioni. Insomma ... non ha senso.

    E comunque se anche vuoi istanziare un Punto3D con new Punto3D(p1X, p1Y, p1Z) è chiaro che Punto3D dovrebbe avere un costruttore che riceve 3 int. Cosa che invece non c'è. E se ci fosse, dovrebbe invocare il super costruttore che riceve i 2 int per impostare lo stato di x/y.

    Ma in ogni caso, questa estensione non ha senso.


    P.S. Posta il codice tra i tag CODE.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie per avermi risposto.

    Ma posso risolvere in qualche modo o è tutto errato?

    Questo è l'esempio finale dopo aver visto il capitolo sul l’object orientation
    per quello che riguarda l'ereditarietà e il polimorfismo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    231
    Provo a dire la mia... Non so se ho capito bene...

    L'errore che ti da è su:
    p1 = new Punto3D(p1X, p1Y, p1Z);

    come vedi ci sono 3 parametri.
    quindi potresti creare un altro costruttore in Punto3D così:

    codice:
    public Punto3D (int x1,int y1,int z1)
    {
         super(x1,y1);
         z=z1;
    }

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.