2016-04-23 3 views
1

У меня есть сложное приложение для создания маршрутов автобусов и множество методов, которые помогут мне это сделать. Это соответствующий код мой вопрос:JAVA, метод возврата расстояния между различными точками

Мой класс Station:

public class Station { 

    private int id; 
    private Point position; 
    private int capacity; 
    private int currentPpl; 

public Point getStationPosition() { 
     return position; 
    } 
} 

Мой класс Stop:

public class Stop { 

    private Station station; 
    private int nLiters; 

public Station getStation() { 
     return station; 
    } 
} 

Мой класс по маршруту:

public class Route { 

    private int start; 
    private Vector <Stop>stops=new Vector <Stop>(); 


public Vector <Stop> getStops(){ 
    return stops; 
} 

Теперь в классе Bus (показано ниже) У меня есть метод, который вычисляет расстояние между двумя точками, метод getTimeDistance и теперь я wan t метод, который возвращает все время, затрачиваемое шиной на перемещение по всем остановкам с использованием метода getTimeDistance, путем доступа к позиции остановки и вычисления по одному.

я покажу, что я разработал до сих пор, чтобы это было сделано в методе «getAllTime»:

public class Bus { 

    private int id; 
    private int capacity; 
    private int speed; 

public double getTimeDistance(Point ini, Point end){ 

    double dist; 
    double time; 
    dist = Math.sqrt((fim.x-ini.x)*(fim.x-ini.x) + (fim.y-ini.y)*(fim.y-ini.y)); 
    time=dist/speed; 

    return time; 

    } 

public getAllTime(Route r){ 

    int res = 0; 
    Point pos=null; 
    Stop s; 

    for (int i=0; a<r.getStops().size();i++){ 
     s=i.getStops().get(i); 
     pos=r.getStation().getStationPosition(); 

     res+=(int)getTimeDistance(pos, pos); 

    } 

    return res; 

} 

    } 

Этот метод «getAllTime», очевидно, не работает, как я хочу, она возвращает «0», потому что вычисляет два равных положения через цикл for.

Мне не хватает чего-то важного в моем коде, чтобы сделать это, через цикл «for» у меня уже есть позиции остановок.

Я хочу рассчитать время между 1-й и 2-й позицией, 2-й и 3-й, 3-й и 4-й и т. Д., А затем возвращает сумму всех рассчитанных раз.

+3

Не используйте 'Vector'. Используйте 'ArrayList'. См. Javadoc 'Vector' для чего. – Andreas

+0

u понимают, что getters каждого класса возвращают нулевые значения theres no way that for loop get выполняется, так как ваш вектор в классе маршрута пуст. \ – Priyamal

+0

@Priyamal Это, скорее всего, минимальный пример с ненужным удаленным кодом, и мы высоко ценим, что , – Andreas

ответ

1

Предполагая, что вы позаботились о комментариях выше, как с помощью ArrayList вместо Vector, изменить способ что-то вроде этого:

public int getAllTime(Route r){ 
    int res = 0; 
    //Am assuming you will have logic to check the route is valid and all 
    //like ensuring that there are altleast two stops. so leaving out all that 
    Stop initial = r.getStops().get(0); 
    for (int i=1; i<r.getStops().size();i++){ 
     Stop dest=r.getStops().get(i); 
     Point iniP = initial.getStation().getStationPosition(); 
     Point destP = dest.getStation().getStationPosition(); 
     res+=(int)getTimeDistance(iniP, destP); 
     initial = dest 
    } 
    return res; 
} 
2

Поскольку вы используете Vector (не используйте ArrayList), вы можете итерации позиции индекса, как вы, и сравнить с следующей (или предыдущей) остановкой.

Однако на всякий случай вы передумали и используете LinkedList или какую-либо другую реализацию с плохим результатом get(index), используйте итератор и просто запомните предыдущую остановку.

public int getAllTime(Route route) { 
    double totalTime = 0; 
    Point prevPos = null; 
    for (Stop stop : route.getStops()) { 
     Point pos = stop.getStation().getStationPosition(); 
     if (prevPos != null) 
      totalTime += getTimeDistance(prevStop, pos); 
     prevPos = pos; 
    } 
    return (int)totalTime; 
} 

изменение кода также задержать double к int округлению до конца, к предыдущим кумулятивным вопросам округления.


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

Поскольку не каждая остановка автобуса создается равным, это может быть значение остановки (а не станции, поскольку разные маршруты могут останавливаться на разное количество времени).

Вы, конечно, не хотите считать время с первой и последней остановки.

+0

Я собирался опубликовать тот же ответ, я думаю, это должно сработать. : D – Priyamal

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