2015-01-30 2 views
0

Я пытаюсь передать координаты x и y конструктору класса с помощью java.awt.Point. Мой основной класс выдает ошибку: «Конструктор Quadrilateral (int, int, int, int, int, int, int, int) не определен. Я думал, что, переходя к моему строителю« Четырехугольник »(Point ... points) я мог бы передать координаты в виде простого списка. может кто-нибудь сказать мне, где эти несколько строк кода может быть неправильно?Передайте значения классу

Main

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

четырехугольника класс

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

} 
+2

Нет, это не так, как Java varargs работает вообще. –

+0

Подсказка: вы не передаете координаты в заявлении 'new Quadrilateral (1, 1, 6, 2, 6, 9, 2, 7);'. Скорее, вы передаете 8 целых чисел. – apnorton

ответ

1

Ваш код не имеет никакого смысла, у вас есть параметр varargs Points, но не используется в конструкторе, вы можете заменить его конструктором no-arg, если у вас есть не использовать для ввода параметров не

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

Ваш конструктор принимает a varargs от Point - лет u не может просто пройти в кучу int s. Попробуйте создать экземпляр Point и передать их.

0

Ваш код может быть фиксированным, как предполагает @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 с.

+0

Но что делать, если пользователь хочет вводить аргументы переменной длины, например, он хочет создать экземпляр только двух точек, а остальные, которые он предполагает, будут установлены в значение по умолчанию. В этом случае varargs окажутся полезными :) –

+0

Название класса «Четырехугольник» заявляет, что ему потребуется 4 параметра. С помощью подхода 'varargs' вы говорите пользователю, что он может передать много очков, даже если мы не будем их использовать (о которых пользователи не знают). И это не хорошая практика проектирования. При четырехпараметрическом подходе он может выполнять «нулевые» проверки, так как «varargs» aproach также нужен. –

+0

Да, это правда, но поскольку пользователь настаивает на varargs. Но, тем не менее, вы не считаете, что лучше проверить нуль и игнорировать дополнительные значения в четырехстороннем классе, а не заставлять пользователя на 4 балла и проверять, прошел ли пользователь null.Я имею в виду, что вы правы в этом случае, но, возможно, некоторые из них, где varargs будут более полезными :) –

Смежные вопросы