Programmieren Tutorium 12

Listen

Gliederung

  • Review Übungsblatt 3 A/B
  • Listen
  • Input Validation
  • File I/O

Review Übungsblatt 3 A/B

Teil A

  • Input Validation
    • Dazu gleich mehr…
  • Referenzvariablen initialisieren
  • Edge-Cases außerhalb von Schleifen behandeln

Teil B

  • Spezifikation lesen (iteration bounds)
  • Testen!

Listen

Einfach verkettete Liste

Einfach verkettete Liste

  • Jedes Element zeigt auf Nachfolger

Doppelt verkettete Liste

Doppelt verkettete Liste

  • Jedes Element zeigt auf Nachfolger und Vorgänger

Listen vs. Arrays

  • Listen
    • unbeschränkte Größe
    • performantes Einfügen/Entfernen
  • Arrays
    • wahlfreier Elementzugriff
    • cache-effizienz

Übung

Implementiere die gegebene Datenstruktur als einfach verkettete Liste

Lösung

Input Validation

Never trust user input

Parameter

public static void main(String[] args) {
    int input;
    try {
        input = Integer.parseInt(args[0]);
    } catch (NumberFormatException e) {
        System.err.println(args[0] + " is not a valid number.");
    }
    // process input
}
  • Falsches Zahlenformat wird mit try-catch behandelt

Übung

Aufgabe

  • line ist eine Zeile aus einer .csv Datei
    • Werte sind mit ; separiert
  • „Spalten“ haben unterschiedliche Typen
    1. Nachname, Vorname
    2. Alter in Jahren
    3. Gehalt in € (, als Trennzeichen)
  • Werte können von Whitespace umgeben sein

Lösung

File I/O

Copy-Paste-Beispiel

try (BufferedReader reader = new BufferedReader(new FileReader("f.txt"))) {
    String line = reader.readLine();
    while (line != null) {
        // TODO: process line here
        line = reader.readLine();
    }
} catch (IOException e) {
    System.err.println(e.getMessage());
    System.exit(1);
}
  • FileReader liest aus Dateien
  • BufferedReader liest aus anderem Reader
    • puffert Quelle
    • bietet Methode readLine()
  • try-with-resources schließt Resourcen „automagically“

Feierabend!

© http://xkcd.com/327/