Konsole

Joerg46

Mitglied
Ich habe folgendes Programm aufgebaut. Leider werden die Punkte der Koordinaten aber auf der Konsole nur als Hieroglyphen ausgegeben. Woran könnte das liegen? Das Ergebnis, wo ich den Abstand berechne dagegen wird ausgegeben.
class Point { /* Attribute */ private double x; private double y; /*Constructor */ public Point(double xIn, double yIn) { x = xIn; y = yIn; } /* get-Method */ public double getX() { return x; } /* set-Method */ public void setX(double xIn) { x = xIn; } /* get-Method */ public double getY() { return y; } /* set-Method */ public void setY(double yIn) { y = yIn; } } class GeoUtil{ Point p1, p2; GeoUtil (Point point1, Point point2){ this.p1 = point1; this.p2 = point2; } public double distance() { return Math.sqrt((p2.getX() - p1.getX()) * (p2.getX() - p1.getX()) + (p2.getY() - p1.getY()) * (p2.getY() - p1.getY())); } } class DistanceApplication { public static void main(String[] args){ /* point values */ GeoUtil s = new GeoUtil(new Point(1,1), new Point(5,4)); Point P1 = new Point(1,1); Point P2 = new Point(5,4); double distanz = s.distance(); /* print on screen/cmd line */ System.out.println("Der Punkt P1 hat die Werte: " + P1); System.out.println("Der Punkt P2 hat die Werte: " + P2); System.out.println("Der Abstand von P1 und P2 beträgt "+ distanz); } }
 
Wie hast du denn diese lustigen Kästchen hingekriegt?

Verwende bitte die Code-Tags, die drei Punkte, rechts vom Smiley, dann Code - Java.

Definiere "Hieroglyphen".

Du musst noch die toString() Methode von Point überschreiben, damit sie das ausgibt, was du möchtest. Da jede Klasse implizit von Object erbt, wird auch die Methode toString() geerbt. Diese hat eine Standard-Implementation. Das Ergebnis siehst du bei dir.
 
Code:
class Point {

        
    private double x;
    private double y;
    
      
    public Point(double xIn, double yIn) {   
         x = xIn;
         y = yIn;
    }
      
    public double getX()
    {           
        return x;
    }
    
      
    public void setX(double xIn)
    {
        x = xIn;
    }
    
        
    public double getY()
    {
        return y;
    }
    
      
    public void setY(double yIn)
    {
        y = yIn;
    }
}



class GeoUtil{

    Point p1, p2;
    GeoUtil (Point point1, Point point2){
        this.p1 = point1;
        this.p2 = point2;
   }
  
   public double distance() {
    return Math.sqrt((p2.getX() - p1.getX()) * (p2.getX() - p1.getX()) + (p2.getY() - p1.getY()) * (p2.getY() - p1.getY()));
  
   }
        
      } 
              
class DistanceApplication {

    public static void main(String[] args){
        
            /* point values */
        GeoUtil s = new GeoUtil(new Point(1,1), new Point(5,4));
        Point P1 = new Point(1,1);
        Point P2 = new Point(5,4);
        double distanz = s.distance();
        
                    
            
      
        System.out.println("Der Punkt P1 hat die Werte: " + P1);
        System.out.println("Der Punkt P2 hat die Werte: " + P2);
        System.out.println("Der Abstand von P1 und P2 beträgt "+ distanz);
    
        
           }
        }



Naja da steht
Der Punkt P1 hat die Werte: Point@7adf9f5f
Der Punkt P2 hat die Werte: Point@85ede7b
Der Abstand von P1 und P2 beträgt 5.0
 
Ja, das dachte ich mir, darum habe ich meinen Beitrag noch mal editiert.

Die Standard-Implementation von toString() gibt den Namen der Klasse und den Hashcode aus (wobei ich mir beim Hashcode nicht sicher bin).
 
Noch als Ergänzung, warum das dann funktioniert:

Die Methode println() ruft intern die Methode toString() auf die übergebenen Argumente auf.
 
Soviel muss man da gar nicht probieren. So wird toString() überschrieben:
Java:
class Foo {
    
    @Override
    public String toString() {
        return "Eine Ausgabe, wie ich sie mag!"
    }
}
 
weiter ausprobiere
Als kleine Motivation (wobei man für später das Projekt Lombok und die JEP 359 mal ansehen könnte):
Java:
class Point {    //Code wie im ersten Posting angegeben
....
@Override
public String toString() {
return "x: " + this.x + " y: " + this.y;
}
}
class GeoUtil{  //usw...
Ausgabe unter Eclipse:
Der Punkt P1 hat die Werte: x: 1.0 y: 1.0
Der Punkt P2 hat die Werte: x: 5.0 y: 4.0
Der Abstand von P1 und P2 beträgt 5.0


Zusatz: in der main-Methode haben die Aufrufe von P1 und P2 nichts mit der Berechnungsmethode GeoUtil zu tun. Folgende Änderung könnte besser passen
Java:
//GeoUtil s = new GeoUtil(new Point(1,2), new Point(5,4));
        
        Point P1 = new Point(1,1);
        Point P2 = new Point(5,4);
        GeoUtil s = new GeoUtil(P1, P2);
        double distanz = s.distance();
 
Zuletzt bearbeitet:

Zurück
Oben