将值传递给 class
Pass values to class
我正在尝试使用 java.awt.Point 将 x 和 y 坐标传递给 class 中的构造函数。我的 main class 抛出一个错误,说“构造函数 Quadrilateral(int, int, int, int, int, int, int, int) 未定义。我想在传递给我的构造函数时 'public Quadrilateral(Point... points)' 我可以将坐标作为一个简单的列表传递。谁能告诉我这几行代码可能哪里出错了?
主要
import java.awt.Point;
public class QuadrilateralTest
{
public static void main(String[] args)
{
Quadrilateral quadrilateral = new Quadrilateral(1, 1, 6, 2, 6, 9, 2, 7);
System.out.printf("%s %s %s %s %s\n", quadrilateral);
}
}
四边形class
import java.awt.Point;
public class Quadrilateral
{
//points contain x and y coordinates
private Point point1;
private Point point2;
private Point point3;
private Point point4;
public Quadrilateral(Point... points)
{
point1 = new Point(1, 2);
point2 = new Point(3, 4);
point3 = new Point(5, 6);
point4 = new Point(7, 8);
}
//setters and getters
public Point getPoint1()
{
return point1;
}
public Point getPoint2()
{
return point2;
}
public Point getPoint3()
{
return point3;
}
public Point getPoint4()
{
return point4;
}
public String toString()
{
return ("\nThe Points of the Quadrilateral are:\n " +
getPoint1() +"," + getPoint2() +"," + getPoint3() + "," + getPoint4())+"\n";
}
}
您的构造函数接收 varargs
个 Point
- 您不能只传入一堆 int
。尝试实例化 Point
并将它们传入。
你的代码根本没有意义,你有 varargs Points 参数,但没有在构造函数中使用它们,如果你不需要输入参数,你可以用无参数构造函数替换它
public Quadrilateral()
{
point1 = new Point(1, 2);
point2 = new Point(3, 4);
point3 = new Point(5, 6);
point4 = new Point(7, 8);
}
并在 main()
中做
Quadrilateral quadrilateral = new Quadrilateral();
如果你真的想要传递和使用参数作为可变参数Point
,让你的构造函数使用参数的值:-
public Quadrilateral(Point... points){
if((points.length>0)&&(points[0]!=null)){ //make sure to check this condition to allow user to input any number of parameters
point1=points[0];
}
if((points.length>1)&&(points[1]!=null)){
point2=points[1];
}
.
.
}
然后你可以在main()
中写:-
Point point1 =new Point(1,2);
Point point2 =new Point(1,2);
Quadrilateral quad=new Quadrilateral(point1,point2);
您的代码可以按照@Evan 的建议进行修复,如下所示:
public Quadrilateral(Point... points)
{
point1 = points[0];
point2 = points[1];
point3 = points[2];
point4 = points[3];
}
但是正如你所理解的那样会有很多问题。
如果您恰好需要 4 个点,正如我们在您的构造函数中看到的那样,您根本不应该使用 varargs
。你应该只得到 4 个不同的 Point
参数。
public Quadrilateral(Point _point1, Point _point2, Point _point3, Point _point4)
{
point1 = _point1;
point2 = _point2;
point3 = _point3;
point4 = _point4;
}
这样您将强制用户发送恰好 4 Point
s。
我正在尝试使用 java.awt.Point 将 x 和 y 坐标传递给 class 中的构造函数。我的 main class 抛出一个错误,说“构造函数 Quadrilateral(int, int, int, int, int, int, int, int) 未定义。我想在传递给我的构造函数时 'public Quadrilateral(Point... points)' 我可以将坐标作为一个简单的列表传递。谁能告诉我这几行代码可能哪里出错了?
主要
import java.awt.Point;
public class QuadrilateralTest
{
public static void main(String[] args)
{
Quadrilateral quadrilateral = new Quadrilateral(1, 1, 6, 2, 6, 9, 2, 7);
System.out.printf("%s %s %s %s %s\n", quadrilateral);
}
}
四边形class
import java.awt.Point;
public class Quadrilateral
{
//points contain x and y coordinates
private Point point1;
private Point point2;
private Point point3;
private Point point4;
public Quadrilateral(Point... points)
{
point1 = new Point(1, 2);
point2 = new Point(3, 4);
point3 = new Point(5, 6);
point4 = new Point(7, 8);
}
//setters and getters
public Point getPoint1()
{
return point1;
}
public Point getPoint2()
{
return point2;
}
public Point getPoint3()
{
return point3;
}
public Point getPoint4()
{
return point4;
}
public String toString()
{
return ("\nThe Points of the Quadrilateral are:\n " +
getPoint1() +"," + getPoint2() +"," + getPoint3() + "," + getPoint4())+"\n";
}
}
您的构造函数接收 varargs
个 Point
- 您不能只传入一堆 int
。尝试实例化 Point
并将它们传入。
你的代码根本没有意义,你有 varargs Points 参数,但没有在构造函数中使用它们,如果你不需要输入参数,你可以用无参数构造函数替换它
public Quadrilateral()
{
point1 = new Point(1, 2);
point2 = new Point(3, 4);
point3 = new Point(5, 6);
point4 = new Point(7, 8);
}
并在 main()
Quadrilateral quadrilateral = new Quadrilateral();
如果你真的想要传递和使用参数作为可变参数Point
,让你的构造函数使用参数的值:-
public Quadrilateral(Point... points){
if((points.length>0)&&(points[0]!=null)){ //make sure to check this condition to allow user to input any number of parameters
point1=points[0];
}
if((points.length>1)&&(points[1]!=null)){
point2=points[1];
}
.
.
}
然后你可以在main()
中写:-
Point point1 =new Point(1,2);
Point point2 =new Point(1,2);
Quadrilateral quad=new Quadrilateral(point1,point2);
您的代码可以按照@Evan 的建议进行修复,如下所示:
public Quadrilateral(Point... points)
{
point1 = points[0];
point2 = points[1];
point3 = points[2];
point4 = points[3];
}
但是正如你所理解的那样会有很多问题。
如果您恰好需要 4 个点,正如我们在您的构造函数中看到的那样,您根本不应该使用 varargs
。你应该只得到 4 个不同的 Point
参数。
public Quadrilateral(Point _point1, Point _point2, Point _point3, Point _point4)
{
point1 = _point1;
point2 = _point2;
point3 = _point3;
point4 = _point4;
}
这样您将强制用户发送恰好 4 Point
s。