使用对Point2d对象的引用数组将类转换为使用java.util.ArrayList <point2d>

时间:2017-03-29 21:19:10

标签: java generics arraylist

package polygongeneric;

import java.util.ArrayList;

public class Polygon {

private ArrayList <Point2d> p = null;
private int points = 0;

public Polygon() { }

public Polygon(int numPoints) {
    p = new ArrayList<>();
}

public boolean addPoint(Point2d point) {
   p.add(points, point);
    points++;
    return true;
}

public boolean addPoint(double x, double y) {
   Point2d a = new Point2d(x,y);
   p.add(points, a);
   return true;
}

@Override
public String toString() {
    String s = "";
    for (int i=0; i<points; i++)
        s += p.get(i).toString() + "\n";
    return s;
}

}

我正在尝试将类转换为使用Point2d对象的引用数组作为类型Point2d。这是我到目前为止所得到的,但它没有输出它应该的答案。

这是我的代码输出

(0.1,0.9)

(0.5,0.5)

(0.2,0.5)

这是它应该输出的内容

(0.1,0.9)

(0.3,0.7)

(0.5,0.5)

(0.4,0.8)

(0.2,0.5)

你们有什么想法吗?我做错了什么?

这是我的Point2d课程

package polygongeneric;

public class Point2d {

private double x = 0, y = 0;

public Point2d() { }

public Point2d(double x, double y) {
    setX(x);
    setY(y);
}

public void setX(double initX) {
    if (initX >= 0 && initX <= 1)
        x = initX;
}

public void setY(double y) {
    if (y >= 0 && y <= 1)
        this.y = y;
}

public double getX() { return x; }

public double getY() { return y; }

public String toString() {
    return "(" + x + "," + y + ")";
}

}

这是我的主要方法

package polygongeneric;

public class PolygonGeneric {

public static void main(String[] args) {

    Polygon p = new Polygon(5);

    p.addPoint(new Point2d(.1, .9));
    p.addPoint(.3, .7);
    p.addPoint(new Point2d(.5, .5));
    p.addPoint(.4, .8);
    p.addPoint(new Point2d(.2, .5));

    System.out.println(p);
}

 }

3 个答案:

答案 0 :(得分:2)

您没有在addPoint(double x, double y)中增加位置,所以基本上,您正在用新点替换现有点,因此您缺少一些点值,您需要更正正确的代码如下所示:

public boolean addPoint(double x, double y) {
        Point2d a = new Point2d(x, y);
        p.add(points, a);
        points++;
        return true;
    }

因为您只是在列表末尾添加点,我建议您可以直接使用arraylist.add(point); ,这样您就不会遇到这些增量/其他问题。

另外,您可以更改Polygon类的构造函数(接受int),因为您没有使用numPoints变量,或者使用带{的数组{1}}代替numPoints

ArrayList

答案 1 :(得分:1)

你没有在addPoint(double x,double y)函数中增加点数。

答案 2 :(得分:0)

为什么不重复使用相同的方法?并调用重载的函数 public boolean addPoint(Point2d point);而不是一次又一次地写出相同的逻辑。

public boolean addPoint(double x, double y) {
   Point2d a = new Point2d(x,y);
   return addPoint(a);
}