DigiLern 2012 Banner.jpg
EduCamp in Koeln 2012.png

Bahnanzeige

aus ZUM-Wiki, dem Wiki für Lehr- und Lerninhalte auf ZUM.de

Wechseln zu: Navigation, Suche
Kurzinfo
Links
Dieser Artikel gehört zum Thema Programmieren in Java.
Bildbeschreibung
Diese Seite enthält Unterrichtsideen, die du ausprobieren oder hier diskutieren kannst.
Software oder digitale Medien
Dieser Artikel beinhaltet Themen rund um Software, digitale Medien oder Informatik.
Links
Dieser Artikel beinhaltet eine Linksammlung für den Unterricht.

Inhaltsverzeichnis

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); 
        }
    }
Hand.gif   Ü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