2016-04-23 21 views
1

Ich habe ein bisschen komplexe App, um Busrouten und viele Methoden, die mir helfen, das zu tun. Dies ist der entsprechende Code über meine Frage:JAVA, Methode, um die Entfernung zwischen verschiedenen Punkten

Meine Klasse Station:

public class Station { 

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

public Point getStationPosition() { 
     return position; 
    } 
} 

Meine Klasse-Stop:

public class Stop { 

    private Station station; 
    private int nLiters; 

public Station getStation() { 
     return station; 
    } 
} 

Meine Klasse Route:

public class Route { 

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


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

nun in der Klasse Bus (siehe unten) Ich habe eine Methode, die den Abstand zwischen zwei Punkten berechnet, die Methode "getTimeDistance" und jetzt i wan t eine Methode, die die gesamte Zeit, die der Bus benötigt, um durch alle Haltestellen zu fahren, mit der Methode "getTimeDistance" zurückgibt, indem er auf die Haltestellenposition zugreift und einzeln berechnet.

Ich werde zeigen, was ich bisher entwickeln diese in der Methode „getAllTime“ zu erledigen:

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; 

} 

    } 

Diese Methode „getAllTime“ ist offensichtlich nicht, wie ich arbeiten will, es gibt „0“, weil es berechnet zwei gleiche Positionen durch die Schleife für.

Ich vermisse etwas Wichtiges in meinem Code, um das zu tun, durch die Schleife "für" habe ich bereits die Positionen der Haltestellen.

Was ich will ist die Zeit zwischen der 1. und der 2. Position, der 2. und der 3., der 3. und der vierte und so weiter zu berechnen und dann die Summe aller berechneten Zeiten zurückgibt.

+3

Verwenden Sie nicht 'Vector'. Verwenden Sie 'ArrayList'. Siehe javadoc von 'Vector' für warum. – Andreas

+0

Sie erkennen, dass Getter jeder Klasse Nullwerte zurückgibt Theres keine Möglichkeit, dass für die Schleife ausgeführt wird, da Ihr Vektor in der Route-Klasse leer ist \ – Priyamal

+0

@Priyamal Dies ist wahrscheinlich ein minimales Beispiel, mit unnötigem Code entfernt, und wir schätzen das sehr , – Andreas

Antwort

1

Sie kümmern sich um die Kommentare wie oben nahm Unter der Annahme, mit Arraylist statt Vektor, Ihre Methode, um so etwas wie dies zu ändern:

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

Da Sie Vector verwenden (do, nicht ArrayList verwenden), können Sie Iteriere Indexpositionen wie du und vergleiche sie mit dem nächsten (oder vorherigen) Stopp.

Wenn Sie jedoch Ihre Meinung ändern und eine LinkedList oder eine andere Implementierung mit einer schlechten get(index) Leistung verwenden, verwenden Sie einen Iterator, und erinnern Sie sich einfach an den vorherigen Stopp.

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

Änderungen am Code auch double zu int verzögern bis zum Ende Rundung zum vorherigen kumulativen Rundungsproblemen.


Für eine reale Implementierung, müssen Sie für die Höhe der Zeit berücksichtigen, der Bus an jeder Zwischenbushaltestelle angehalten wird.

Da nicht jede Bushaltestelle gleich erstellt wird, kann dies ein Wert des Stopps sein (nicht der Bahnhof, da verschiedene Routen für unterschiedliche Zeit anhalten können).

Sie wollen die Zeit von der ersten und letzten Haltestelle natürlich nicht zählen.

+0

Ich war im Begriff, die gleiche Antwort zu posten, ich denke, das sollte funktionieren. : D – Priyamal

Verwandte Themen