有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用变量量简化Java方法

在java中工作时,我想简化正在使用的绘图函数(多边形创建者)。通常,创建多边形时,需要执行以下操作:

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

我想使用图像映射器自动给我坐标,这样我就可以复制粘贴到我自己的功能

myCommand(x1, y1, x2, y2, x3, y3);

每一个都将进入顶部的“多边形”命令。但我面临的问题是,当mypoly创建时,它如何知道要添加多少点以及将它们放置在何处

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


共 (4) 个答案

  1. # 1 楼答案

    为了扩展Brian Agnew的答案,可能还需要添加一个Point类,addPoints方法可以接受该类。它可以使从多边形中添加/删除点稍微容易一些

    public final class Point<X,Y>{
        private final X x;
        private final Y y;
    
        public Point(X x, Y y){
            this.x=x;
            this.y=y;
        }
    
        public X getX(){return x;}
    
        public Y getY(){return y;}
    }
    

    然后你可以有一个:

    public void addPoints(Point<Integer,Integer>... points){
        for(Point<Integer,Integer> point:points)
            //your logic
    }
    
  2. # 2 楼答案

    我认为您可以使用一个接收varargs(...)的方法

    每个点都需要一个包装器:

    class Point {
        int x;
        int y;
        Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
    

    方法可以是:

    myCommand(Point ... points)
    

    待命

    myCommand(new Point(0,0), new Point(1,1), new Point(0,1));
    

    对于draw:

    Polygon mypoly = new Polygon();
    for(Point p : points)
        mypoly.addPoint(p.x,p.y);
    Draw.fillPolygon(g,mypoly,Color.blue);
    
  3. # 3 楼答案

    听起来你需要使用builder模式。在伪代码中:

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

    我们的想法是,为构建器提供一组点,它会生成相应的多边形。构建器通常设计为fluent interface。请注意,构建器可以像工厂一样,返回Polygon的适当子类(正方形、三角形、五边形等,如果您愿意的话)

    请注意,您可以使用Java varargs mechanism提供一个接受可变数量参数的方法。e、 g

    public void addPoints(Integer... args) {
       // and iterate here
    }
    

    您可能希望创建一个Point对象来一起定义x/y坐标。否则,上述参数将必须检查偶数个参数,并且这些参数不会绑定在一起

  4. # 4 楼答案

    您可以使用varargs并通过使用获取X和Y数组的constructor动态创建多边形

    (代码未测试)

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

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

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