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);
}
}
答案 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);
}