使用可变数量的参数简化Java方法

nom*_*ant 7 java methods polygon

在java中工作,我想简化我正在使用的绘图功能(多边形创建器).通常,在创建多边形时,执行以下操作:

Polygon mypoly = new Polygon();
mypoly.addPoint(x1, y1);
mypoly.addPoint(x2, y2);
mypoly.addPoint(x3, y3);
Draw.fillPolygon(g, mypoly, Color.blue);
Run Code Online (Sandbox Code Playgroud)

我想使用图像映射器自动给我坐标,所以我可以将它们复制粘贴到我自己的函数中.

myCommand(x1, y1, x2, y2, x3, y3);
Run Code Online (Sandbox Code Playgroud)

其中每个都将进入顶部的polygon命令.我面临的问题是,当mypoly被创建时,它如何知道要添加多少点以及放置它们的位置?

我试图在myCommand添加参数时自动添加点,并且每个点与原始多边形创建方法的x,y相对应.

Bri*_*new 7

听起来你需要使用构建器模式.在伪代码中:

PolygonBuilder pb = new PolygonBuilder();
pb.addPoint(1,1);
pb.addPoint(1,2);
// etc...

Polygon p = pb.newPolygon();
Run Code Online (Sandbox Code Playgroud)

所以我们的想法是为构建器提供一组点,它会生成适当的多边形.建筑商通常设计有流畅的界面.请注意,构建器可以像工厂一样工作,并返回适当的子类Polygon(方形,三角形,五边形等,如果您愿意的话).

请注意,您可以使用Java varargs机制提供一个采用可变数量参数的方法.例如

public void addPoints(Integer... args) {
   // and iterate here
}
Run Code Online (Sandbox Code Playgroud)

您可能希望创建一个Point对象以一起定义x/y坐标.否则上面的内容必须检查偶数个参数,并且这些参数不会绑在一起.


Avi*_*gal 5

您可以使用varargs并使用获取xs和ys数组的构造函数动态创建多边形

(代码未经测试)

public Polygon createPolygon(int... points) {
    if (0 != points.length % 2) {
        throw new IllegalArgumentException("Must have even number of points");
    }

    int numOfPoints = points.length / 2;
    int xs = new int[numOfPoints];
    int ys = new int[numOfPoints];
    for (int i=0; i < numOfPoints;i++) {
       xs[i] = points[i*2];
       yx[i] = points[i*2 + 1];
    }

    return new Polygon(xs, ys, numOfPOints);
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用任意数量的点调用该方法

Polygon p = createPolygon(x1,y1,x2,y2,x3,y3);

  • 通过使用`for(int i = 0; i <points.length; i + = 2)`而不是`i ++`可以简化for循环.这样你就可以摆脱混乱的`i*2`数学. (2认同)