2013-11-21 5 views
0

Итак, я только начал работать с ArrayList и awt.Point. То, что я пытаюсь сделать здесь, - вывести массив координат X и Y, когда пушечное ядро ​​находится в полете. Однако, когда я запускаю программу, я получаю кучу Point[x=0,y=0] в массиве.Координаты по координатам полёта в полете Cannonball

Я думаю, что часть проблемы может быть взамен Point. Я возвращаю Point в bowling.Move() и bowling.getLocation(). Возможно, что кто-то переопределяет другого? Я чувствую, что я близок к моему результату, но теряю, как туда добраться.

import java.awt.Point; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class Cannonball { 

public static void main(String[] args) { 
    //Part 1: Open Scanner 
    Scanner keyboard = new Scanner(System.in); 

    //Part 2: Create a new cannonball 
    Ball bowling = new Ball(0); 

    //Part 3: Ask user for initial angle and starting velocity 
    System.out.println("Alright, give us the angle at which to fire: "); 
    bowling.setAngle(keyboard.nextDouble()); 
    System.out.println("And what is the initial velocity: "); 
    bowling.setVel(keyboard.nextDouble()); 

    //Part 4: Return the points of the cannonball's flight 
    for(int i=0; i<bowling.shoot.size(); i++) System.out.println(bowling.shoot); 

    //Part x: Close input 
    keyboard.close(); 
} 

} 

class Ball{ 
private double xPos, yPos, deltaSec; 
private double alpha, v; 
private double yVel, xVel; 
private static final double gravity = -9.81; 

public Ball(double xPos){ 
    this.xPos=xPos; 
    yPos=0; 
} 

public Point move(double deltaSec){ 
    xPos += xVel*deltaSec; 
    yPos += yPos*deltaSec; 
    return new Point(); 
} 

public void yVel(){ 
    yVel=v*Math.sin(alpha)*(deltaSec*gravity); 
} 

public void xVel(){ 
    xVel=v*Math.cos(alpha); 
} 

public Point getLocation(double xPos, double yPos){ 
    return new Point(); 
} 

public void setAngle(double aplha){ 
    this.alpha=alpha; 
} 

public void setVel(double v){ 
    this.v=v; 
} 

public ArrayList<Point> shoot = new ArrayList<Point>(); 
{ 
    while(deltaSec<60){ 
     move(deltaSec); 
     shoot.add(getLocation(xPos, yPos)); 
     deltaSec++; 
    } 
} 
} 

ответ

0

Если вы хотите вернуть Point, который представляет координату х и у в этой временной отметке, вы должны передать их в точку. Point() создаст точку с координатами 0/0.

Вы должны либо вызвать конструктор Point(x,y) (который использует целочисленные координаты экрана, предназначенные для представления пикселей!), Либо использовать Point2D соответственно. Point2D.Double(x, y).

Update:

Вот пример реализации того, что я думаю, предназначен для getLocation:

//Point version 
public Point getLocation(double xPos, double yPos){ 
    return new Point((int)xPos, (int)yPos); //Point only takes int coordinates 
} 

//Point2D version 
public Point2D getLocation(double xPos, double yPos){ 
    return new Point2D.Double(xPos, yPos); 
} 

move должны делать то же самое, если он должен вернуть точку на всех.

UPDATE 2:

Вы, кажется, добавили этот код:

public ArrayList<Point> shoot = new ArrayList<Point>(); 
//I add this line to highlight the difference: the line above is no method signature 
{ 
    while(deltaSec<60){ 
    move(deltaSec); 
    shoot.add(getLocation(xPos, yPos)); 
    deltaSec++; 
    } 
} 

Заметьте, что это не метод, но инициализатор блок, который будет работать во время создания объекта. Думаю, это не предназначено.

+0

Итак, если бы я должен был установить общедоступную точку getLocation (int xPos, int yPos), будет ли это не совпадать с вашей точкой (x, y)? Мои извинения, все еще изучая, как правильно строить конструкторы. – Truzen

+0

@Truzen no, 'getLocation (x, y)' - это просто метод, принимающий координаты x и y и возвращающий новый экземпляр Point. Однако этот экземпляр должен знать значения x и y. Я добавлю пример. – Thomas

+0

Этот пример объясняет преобразование моей точки из double в int. Спасибо. Я отредактировал 'return new Point', чтобы включить '(int) xPos, (int) yPos' и сбросил точку возврата из 'move' и установил ее в void. Тем не менее, он все еще создает точки «x = 0, y = 0». Хмм .... – Truzen

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