1

I have got a applikation in eclipse which count the rectangel, height, width from Points (p1,p2,p3,...,p10).

My Points are printed like this:

Point@659e0bfd, Point@2a139a55, Point@15db9742, Point@6d06d69c, Point@7852e922, Point@4e25154f, Point@70dea4e, Point@5c647e05, Point@33909752, Point@55f96302

Could you show me how should it looks like? I don't get it these toString method. Does the rest of code look good?

    import java.util.ArrayList;
import java.util.List;

public class App {      //new public class App


    public static void main(String[] args) {

        Point p1 = new Point(10.681,-48.857);   // new Points (x,y)
        Point p2 = new Point(96.980,20.724);
        Point p3 = new Point(66.647,-66.558);
        Point p4 = new Point(-2.674,-58.571);
        Point p5 = new Point(40.11,-12.342);
        Point p6 = new Point(27.782,46.809);
        Point p7 = new Point(54.759,-46.709);
        Point p8 = new Point(-33.89,-90.787);
        Point p9 = new Point(15.84,-67.553);
        Point p10 = new Point(19.481,51.331);


        List<Point> list1 = new ArrayList<Point>(); // Create ArrayList and add Points
        list1.add(p1);
        list1.add(p2);
        list1.add(p3);
        list1.add(p4);
        list1.add(p5);
        list1.add(p6);
        list1.add(p7);
        list1.add(p8);
        list1.add(p9);
        list1.add(p10);

        public String toString() {
            return Point;

        }

        new BoundingBox(list1);
        double c = BoundingBox.height();
        double d = BoundingBox.width();

        System.out.println("Das Array beinhaltet die Punkte" + list1 ); // This prints: "Das Array beinhaltet die Punkte" and the list
        System.out.println("Die BoundingBox hat die Hohe " + c + " und die Breite " + d + "\n" );   // This prints the height and the width
        System.out.println("Der maximale Punkt der BBox betragt (" + BoundingBox.getMaxPoint() +")." ); // This prints:
        System.out.println("Der minimale Punkt der BBox betragt (" + BoundingBox.getMinPoint() +")." ); // This prints:


    }
}

BoundingBox

import java.util.List;

public class BoundingBox {      //new class BoundingBox
private static Point minPoint;      //new 
private static Point maxPoint;


public BoundingBox(List<Point> manyPoints) {
    double minX = manyPoints.get(0).getX();
    double maxX = manyPoints.get(0).getX();
    double minY = manyPoints.get(0).getY();
    double maxY = manyPoints.get(0).getY();

    for (int i = 0; i < manyPoints.size(); i++) {
        Point test = manyPoints.get(i);
        test.getX();

        if (test.getX() < minX) {
            minX = test.getX();     

        }

        if (test.getX() > maxX) {
            maxX = test.getX();
        }

        if (test.getY() < minY) {
            minY = test.getY();

        }

        if (test.getY() > maxY) {
            maxY = test.getY();

        }

        minPoint = new Point(minX, minY);
        maxPoint = new Point(maxX, maxY);

    }
}

public static double width() {
    double a = (maxPoint.getX() - minPoint.getX());     // calculate the width
    return a;
}

public static double height() {
    double b = (maxPoint.getY() - minPoint.getY());     // calculate the width
    return b;
}

public static Point getMaxPoint() {
    return maxPoint;
}

public static Point getMinPoint() {
    return minPoint;
}

}

Point

public class Point {


private double x;  
private double y;

public Point(double xnew, double ynew) { 
    x = xnew;
    y = ynew;
}

public double getX() {  
    return x;
}

public void setX(double xnew) {
    x = xnew;
}

public double getY() {
    return y;
}

public void setY(double ynew) {
    y = ynew;
}




}
inerini9
  • 55
  • 1
  • 8
  • 1
    It works just fine, but as the answer below has pointed out, you don't override toString in your class, meaning you will call the inherited version from Object, which prints out the reference. – Stultuske May 08 '15 at 08:25
  • If you plan to print any class object using `System.out.println()` you must have `toString()` implementation for that class. – akhil_mittal May 08 '15 at 08:26
  • toString() is already define function in String class and to make changes you have to override them. by using @override – Sagar Rout May 08 '15 at 08:27

3 Answers3

14

You should override toString in your Point class.

public class Point {
    ...
    @Override
    public String toString ()
    {
        return x + "," + y; // or whatever you wish to display
    }
    ...
}

Oh, and it's not clear what you intended to do here in your App class :

    public String toString() {
        return Point;

    }

this shouldn't even pass compilation. And unless you are trying to print an App instance, you don't have to override toString of App.

Eran
  • 387,369
  • 54
  • 702
  • 768
3

As per documentation, if you don't specify your own override of the toString method, the parent's (in this case, Object's) method is invoked, and this results in:

 getClass().getName() + '@' + Integer.toHexString(hashCode())
nafas
  • 5,283
  • 3
  • 29
  • 57
CptBartender
  • 1,235
  • 8
  • 22
2

Add to your Point class the following method

public String toString() {
  return "Point[" + x + ", " + y + "]";
}
Brett Walker
  • 3,566
  • 1
  • 18
  • 36