Java/Bahnanzeige

Aus ZUM-Unterrichten
< Java
Version vom 14. November 2006, 06:24 Uhr von main>Ugh (neu)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Vorlage:Babel-3

Projekt

  • Dieses Projekt entstand aus einer Modellierung einer Zuganzeigetafel.



Benötigt
  • Liste, while, if...else, boolean, int, double
Hinweis

Zur Vereinfachung der Aufgabe wird die Zeit als double erfasst. Das kann zu Problemen führen, wenn man Zeiten addieren möchte (z.B. Einrechnen der Verspätung).

Die Einfügemethode für einen Zug funktioniert wie folgt: (Der Algorithmus ist nicht unbedingt optimal, aber so ist er noch einfach zu verstehen)

Quelltext

<java>

   public void fügeZugHinzu(Zug pZug){
       if (zugliste.isEmpty()) {
           zugliste.insertBehind(pZug);
       }
       else {
           Zug zwischenspeicher;
           zugliste.toFirst();
           boolean schonEingefügt=false;
           while (!zugliste.isBehind() && !schonEingefügt){
               zwischenspeicher = (Zug) zugliste.getItem();
               if (zwischenspeicher.getAbfahrtzeit()>=pZug.getAbfahrtzeit()){
                   zugliste.insertBefore(pZug);
                   schonEingefügt=true;
               }
               zugliste.next();
           }
           if (!schonEingefügt) zugliste.insertBefore(pZug); 
       }
   }

</java>


Übung
  1. Weshalb wird „zwischenspeicher“ angelegt? Welche Funktion hat „schonEingefügt“?
  2. Gliedern Sie den Algorithmus:
    • a) Behandlung einer leeren Liste
    • b) Suchen der Position, an der eingefügt werden soll
    • c) Behandlung am Ende Einfügen
  3. Implementieren Sie als Methode der Verwaltung „gibZügeAus(int zahl), die zahl Züge mit einer laufenden Nummer, der Abfahrtszeit, des Ziels und der Gleisnummer ausgibt. Gehen Sie sinnvoll mit dem Problem um, dass zahl größer sein kann als die eingetragenen Züge.
    • Bspl:
    • 1. 14.39 Hamburg Gleis 5
    • 2. 17.29 Bonn Gleis 2
  4. Freiwilliger Zusatz: Schreiben Sie die Methode streicheZugNr (int zahl), die den Listeneintrag Nummer zahl entfernt.


Zugehöriges Projekt

Neben Java/List sind folgende Klassen erforderlich

<java> public class Zug {

 // Eigenschaften
 private double abfahrtzeit;
 private double verspätung;
 private int gleisnummer;
 private String zugBezeichnung;
 private String ankunftsBahnhof;
 // Ende Variablen
 public Zug (double pAbfahrtzeit, double pVerspätung, int pGleisnummer, String pZugBezeichnung, String pAnkunftsBahnhof){
   abfahrtzeit= pAbfahrtzeit;
   verspätung = pVerspätung;
   gleisnummer = pGleisnummer;
   zugBezeichnung = pZugBezeichnung;
   ankunftsBahnhof = pAnkunftsBahnhof; 
 }
 
 // Methoden
 public String getAnkunftsBahnhof() {
   return ankunftsBahnhof;
 }
 public void setAnkunftsBahnhof(String ankunftsBahnhof) {
   this.ankunftsBahnhof = ankunftsBahnhof;
 }
 public String getZugBezeichnung() {
   return zugBezeichnung;
 }
 public void setZugBezeichnung(String zugBezeichnung) {
   this.zugBezeichnung = zugBezeichnung;
 }
 public int getGleisnummer() {
   return gleisnummer;
 }
 public void setGleisnummer(int gleisnummer) {
   this.gleisnummer = gleisnummer;
 }
 public double getVerspätung() {
   return verspätung;
 }
 public void setVerspätung(double verspätung) {
   this.verspätung = verspätung;
 }
 public double getAbfahrtzeit() {
   return abfahrtzeit;
 }
 public void setAbfahrtzeit(double abfahrtzeit) {
   this.abfahrtzeit = abfahrtzeit;
 }
 // Ende Ereignisprozeduren

} </java>

<java> public class Verwaltung {

   private List zugliste;
   
   public Verwaltung()
   {   
       zugliste=new List();
       Zug zug=new Zug(12.05,20,5,"ICE","Lummerland");
       fügeZugHinzu(zug);
       zug=new Zug(11.11,10,2,"RE","Nimmerland");
       fügeZugHinzu(zug);
       zug=new Zug(13.44,20,5,"RB","Sibirien");
       fügeZugHinzu(zug);
       zug=new Zug(12.14,20,5,"RB","Entenhausen");
       fügeZugHinzu(zug);
       zug=new Zug(17.30,20,2,"S-Bahn","Hansaring");
       fügeZugHinzu(zug);        
   }
   
   public void fügeZugHinzu(Zug pZug){
       if (zugliste.isEmpty()) {
           zugliste.insertBehind(pZug);
       }
       else {
           Zug zwischenspeicher;
           zugliste.toFirst();
           boolean schonEingefügt=false;
           while (!zugliste.isBehind() && !schonEingefügt){
               zwischenspeicher = (Zug) zugliste.getItem();
               if (zwischenspeicher.getAbfahrtzeit()>=pZug.getAbfahrtzeit()){
                   zugliste.insertBefore(pZug);
                   schonEingefügt=true;
               }
               zugliste.next();
           }
           if (!schonEingefügt) zugliste.insertBefore(pZug); 
       }
   }
   

} </java>


Siehe auch