Java/Bahnanzeige: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
main>ZUM-Wiki-Bot
(java -> source using AWB)
main>ZUM-Wiki-Bot
(</source>)
Zeile 38: Zeile 38:
         }
         }
     }
     }
</java>
</source>


{{Übung|
{{Übung|
Zeile 118: Zeile 118:
   // Ende Ereignisprozeduren
   // Ende Ereignisprozeduren
}
}
</java>
</source>


<source lang="java">
<source lang="java">
Zeile 161: Zeile 161:
      
      
}
}
</java>
</source>





Version vom 25. November 2009, 21:35 Uhr

Vorlage:Kurzinfo-4

Projekt

  • Dieses Projekt entstand aus einer Modellierung einer Zuganzeigetafel.



Benötigt
  • Liste, while, if...else, boolean, int, double
  • BlueJ, daher ohne main-Methode
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

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


Ü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

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


Siehe auch