2017-01-13 3 views
-3

У меня 3 класса: Point, Polygon и ClientePolygon. Point создает объект, Point(double x, double y) с множеством нестатических методов. Polygon создает массив Point с нестационарными методами, то есть записывает, перемещает и возвращает Point, ближайший к началу координат в массиве. ClientePolygon выполняет Polygon. Проблема в том, что когда я запускаю ClientePolygon, он дает мне Point class executed..., и я хочу запустить Polygon. Какие-либо предложения? Большое спасибо.Как вызвать нестатический метод из другого класса?

ClientePolygon:

package k; 
public class ClientePolygon { 
    public void main(String [] args){ 
     Point origem = new Point (0,0); 
     Point [] vertices = new Point[4]; 
     vertices[0] = new Point (1.0,1.0); 
     vertices[1] = new Point (1.0,5.0); 
     vertices[2] = new Point (2.0,5.0); 
     vertices[3] = new Point (2.0,1.0); 

     for (int i = 0; i < vertices.length; i++) { 

     vertices[i].translate(5.0,7.5); 

     } 
    } 
} 

Точка:

package k; 

public class Point { 

    private double x; 
    private double y; 

    public Point(double x, double y){ 

     this.x = x; 

     this.y = y; 

    } 

    public double getX(){ 

     return x; 

    } 

    public String toString(){ 

     return "("+ this.x+", "+this.y+")"; 
    } 

    public Point copy(){ 

     Point copia = new Point(x, y); 

     return copia; 

    } 


    public static double distance(Point ponto1, Point ponto2){ 

     double distX = ponto1.x + ponto2.x; 

     double distY = ponto1.y + ponto2.y; 

     return Math.sqrt(distX*distX + distY*distY); 

    } 

    public void translate(double dx, double dy){ 

     double transX = this.x + dx; 

     double transY = this.y + dy; 

     System.out.println(toString()+" fica "+ transX +" e "+ transY); 

    } 

    public static void main(String[] args) { 

     Point ponto1 = new Point(2,1); 

     Point ponto2 = new Point(3,9); 

     System.out.println(ponto1.toString()); 

     System.out.println(ponto2.toString()); 

     System.out.println("A distancia entre os pontos eh: " +distance(ponto1, ponto2)); 

     System.out.println("O ponto copiado eh: "+ponto2.copy()); 

     ponto2.copy().translate(2, 3); 

    } 

} 

Polygon:

package k; 

public class Polygon { 

    private Point [] vertices; 

    public Polygon(Point [] vertices){ 

     this.vertices = vertices; 

    } 

    public String toString(){ 

     return "Ponto 1 em: "+vertices; 

    } 

    public Point closestToOrigin(){ 

     Point proximo = new Point(0, 0); 
     Point origem = new Point(0,0); 

     for (int i = 0; i < vertices.length; i++) { 

      double distancia = Point.distance(vertices[i], origem); 

      if(distancia<Point.distance(vertices[i-1], origem)){ 

       proximo = vertices[i]; 

      } 

     } 

     return proximo; 

    } 

    public void translate(double dx, double dy){ 

     Point Trans = new Point(dx, dy); 

     System.out.println("Ponto 1 fica: "+vertices[0]+Trans+", Ponto 2 fica: "+vertices[1]+Trans+" e Ponto 3 fica: "+vertices[2]+Trans); 

    } 

} 
+3

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

+1

_ "массив точки с нестационарными методами" _ и _ ", когда я запускаю ClientePolygon, он дает мне класс Point, выполняемый" _ - эти утверждения не имеют смысла и, по-видимому, указывают на непонимание основных понятий. Вам нужно уточнить, что вы просите. –

+0

Вы хотите «запустить Polygon» на * what *, точно? –

ответ

0

Вы должны создать экземпляр класса Polygon перед вызовом нестатический метод:

Polygon poly = new Polygon(vertices); 

Тогда вы можете сделать:

poly.translate(5.0,7.5); 
0

Для вызова нестатического метода вам нужно создать экземпляр другого класса, делая

Class object = new Class(parameters); 

, а затем вызвать метод этого объекта:

object.method();