任意数量的数组(Oracle教程)

时间:2016-01-29 07:23:59

标签: java variadic-functions

所以我刚刚学习了Java Oracle教程中的varargs,我在阅读这段代码时遇到了麻烦。例如,什么是"(点...角落)"我知道它是(Point []角落的缩短版本)但是" Point&#34 ;?它是一个数组告诉我们我们定义的一些(x,y)坐标吗?另外,我不明白"(角[1] .x)"手段。什么是点符号" .x和.y",以及其他"角落"?对不起所有的问题,我知道它们看起来像是一个愚蠢的问题,但我仍然感谢你的时间。

public Polygon polygonFrom(Point... corners) {
int numberOfSides = corners.length;
double squareOfSide1, lengthOfSide1;

// The "corners" array dot notations below are what confuse me the most. 
// There are values stored in each index correct?
//So "corner[1].x could contain element 6 right?

squareOfSide1 = (corners[1].x - corners[0].x)
                 * (corners[1].x - corners[0].x) 
                 + (corners[1].y - corners[0].y)
                 * (corners[1].y - corners[0].y);
lengthOfSide1 = Math.sqrt(squareOfSide1);

// more method body code follows that creates and returns a 
// polygon connecting the Points

}

2 个答案:

答案 0 :(得分:0)

从教程:

  

假设Point是一个表示x,y坐标的类

所以,Point是一个假设的类,如下所示:

class Point {
    int x;
    int y;
}

Polygon类是从任意数组的点构造的。语法corners[1].x返回x数组中第二个Point对象上corners字段的值。

答案 1 :(得分:0)

请注意Point... points并不是Point[] points的缩短,实际上第一个只能是函数的最后一个参数,第二个参数可以在任何位置。例如,编写类似以下的函数是合法的

public void foo(Point[] points, int arg2){}

但编写

是不合法的
public void foo(Point... points, int arg2){}

回到你的问题,考虑以下Point类(如教程中所指出的):

public class Point
{
   public int x;
   public int y;
}

然后是Point... corners一个点数组,然后使用语法corners[i](使用i> = 0和i< corners.length)访问数组的第i个元素(请记住数组索引从0开始而不是从1开始。因此,如果您将命令corners[i].x分解为

Point p = corners[i];
int xcord = p.x

我认为这对你来说更清楚,实际上命令首先取数组的第i个元素而不是该元素的x坐标。

希望一切都清楚。如果你之前从未编程,我建议从java开始。这是一个开始的好地方 - > http://www.tutorialspoint.com/java/