Zum Inhalt

Programmieren II

Herzlich willkommen zur Programmieren II-Veranstaltung! Wir haben in Programmieren I unter Verwendung der Programmiersprache Java bereits wesentliche Konzepte kennengelernt, die für das Verständnis moderner Programmierens notwendig sind. Diese Kenntnisse wollen wir nun erweitern und vertiefen. Wir werden Git kennenlernen, Exceptions, Wrapper-Klassen, Interfaces und Collections. Wir beschäftigen uns intensiv mit dem Testen von Programmen und lernen Lambda-Ausdrücke kennen. Hier einige Tipps, damit Sie die Veranstaltung erfolgreich durchführen und Sie dabei auch Spaß haben:

  1. Lösen Sie alle Übungsaufgaben selbständig! Es ist kein Problem, wenn Sie für das Bewältigen der Übungen etwas länger benötigen. Sollten Sie es gar nicht alleine schaffen, ist das auch kein Problem. Wichtig ist dann, dass Sie sich die Lösung anschauen und es erneut selbständig versuchen. Hören Sie nicht auf, bis Sie es geschafft haben!
  2. Die Klausurvorbereitung beginnt mit Beginn der Veranstaltung. Es ist nicht möglich, die Klausur am Ende des Semesters zu bestehen, wenn Sie nicht das ganze Semester über intensiv programmieren. Die Übungsaufgaben sind "kleine" Aufgaben, um das in der Vorlesung vermittelte Wissen direkt anzuwenden. Für die Lösung der Hausaufgaben ist bereits ein gewisses Abstraktionsniveau erforderlich, um zu erkennen, dass das in der Vorlesung vermittelte Wissen dafür ausreichend ist.
  3. Programmieren lernt man nur durch Programmieren. Sie müssen es tun. Das Lesen von Büchern oder das "Anschauen" von Code genügt nicht. Eine Sprache lernt man auch nur durch Sprechen. Sie müssen programmieren, programmieren, programmieren...
  4. Lassen Sie sich durch Fehler nicht verunsichern, sondern analysieren Sie Ihre Fehler. Bis zur Klausur sollten Sie alle Fehler einmal gemacht haben. Wenn Sie sich überlegen, warum das jeweils ein Fehler war, dann werden Sie diesen Fehler nicht wiederholen und haben durch die Reflektion eine Menge gelernt. Fehler zu machen (und darüber zu reflektieren) gehört zu den besten Lernmethoden des Programmierens.
  5. Haben Sie Spaß! Je mehr Sie das Programmieren lernen, je mehr Spaß werden Sie haben. Wir versuchen, dass Sie das ganze Semester über Spaß am Programmieren haben werden. Sollte es Ihnen zwischendurch keinen Spaß mehr machen, geben Sie mir sofort Bescheid!

Viel Erfolg! Und viel Spaß!

Organisatorisches

Der Plan zur Durchführung der Veranstaltung ist derzeit wie folgt:

  • Themen werden ausführlich in diesem Skript beschrieben und in den Vorlesungen eingeführt und verdeutlicht.
  • Die Veranstaltungen finden in Präsenz statt. Es werden keine Videos erstellt.
  • Das Skript ist bereits vollständig, kann aber immer noch geändert und ergänzt werden.
  • Sie können frei wählen, welche der beiden Übungen Sie besuchen.
  • Die Veranstaltung wird durch ein Tutorium unterstützt. Der Termin für das Tutorium wird noch bekanntgegeben.
  • Sollten Sie Wünsche haben, diesen Plan zu ändern, kommen Sie gerne auf mich zu

Zur erfolgreichen Durchführung der Veranstaltung sollten Sie die Aufgaben lösen. Es werden insgesamt wahrscheinlich 9 Aufgaben sein, die Sie selbständig lösen. Sie können die Aufgaben auch zu zweit lösen. Am Ende des Semesters schreiben wir eine Klausur (am Rechner). Diese Klausur wird bewertet und entspricht der Note für das gesamte "Programmieren"-Modul. Bitte beachten Sie, dass das Modul erfahrungsgemäß nur dann bestanden werden kann, wenn Sie die Übungen und Aufgaben selbstständig lösen können. Selbst wenn Ihnen zunächst eine eigene Lösung schwerfällt, müssen Sie es irgendwann im Laufe des Semsters - am besten, jeweils so schnell wie möglich - schaffen, diese Aufgaben selbstständig zu implementieren.

Unter Aufgaben sind die Aufgaben beschrieben, die Sie in jeder Woche ausführen sollten. Damit Sie dies erfolgreich erledigen können, ist jeweils angegeben, welche Themen Sie dafür durcharbeiten müssen. Das Durcharbeiten der jeweiligen Themen entspricht jeweils einer Vorlesung.

Daneben gibt es jede Woche (zu jedem Thema) Übungen, die wir in den Übungszeiten besprechen. Diese dienen der Anwendung und der Festigung der erlangten Kenntnisse. Die Übungen sind kleine Aufgaben, an denen Sie das neue Wissen anwenden sollen. Die Übungen dienen der Befähigung, die (größeren) Aufgaben lösen zu können.

Für die Klausurzulassung müssen Sie eine Übung (zu zweit) durchgeführt haben. Tragen Sie sich dafür in das Wiki in Moodle ein.

Für die Kommunikation untereinander verwenden wir Slack. Dort können Sie alle inhaltlichen und organisatorischen Fragen stellen. Ich fände es gut, wenn ich dort möglichst wenig Fragen - zumindest die inhaltlichen - beantworten müsste, sondern eine Art internes Diskussionsforum entsteht. Es ist sehr gewünscht, dort Fragen zu stellen und noch mehr gewünscht, diese von Ihnen dort beantwortet zu sehen. Damit wäre allen geholfen und ich kann besser erkennen, wo noch Nachhol- bzw. Erläuterungsbedarf bei den meisten besteht. Außerdem lernen Sie beim Beantworten der Fragen nochmals deutlich mehr. Das wäre super, wenn das klappt!

Grober Inhalt (kann sich noch ändern)

Wir beschäftigen uns dieses Semester mit weiteren Konzepten der Programmierung. Wir lernen weitere Datenstrukturen kennen (Collections), werden lernen, mit Exceptions umzugehen und implementieren Tests. Wir beschäftigen uns mit Grafischen Nutzeroberflächen (GUIs) und lernen, Nutzereignisse zu behandeln.

Nachfolgend der vorläufige Wochenplan (wird eventuell angepasst).

Woche Themen (Vorlesung) Übung Aufgabe
06.-10.04.2026 Organisatorisches, Wiederholung,
Einstieg
Übung 1  -
13.-17.04.2026 Aufzählungstypen, Wrapper-Klassen (boxing und unboxing) Übung 2 Aufgabe 1
20.-24.04.2026 Exceptions Übung 3 Aufgabe 2
27.-01.05.2026 eigene Exceptions Übung 4 Aufgabe 3
04.-08.05.2026 Collections (List und Set) Übung 5 Aufgabe 4
11.-14.05.2026 Collections (Map) und
Abstrakte Klassen
Übung 6 Aufgabe 5
18.-22.05.2026 Interfaces Übung 7 Aufgabe 6
25.-29.05.2026 Lambdas Übung 8 Aufgabe 7
01.-05.06.2026 Java-Streams Übung 9 Aufgabe 8
08.-12.06.2026 Genererics Übung 10 Aufgabe 9
15.-19.06.2026 JUnit Übung 11 Probeklausur 1
22.-26.06.2026 Test driven development Übung 12 Probeklausur 2
29.-03.07.2026 Klausurvorbereitung Übung 13 Probeklausur 3
06.-10.07.2026 Klausurvorbereitung -  -
29.07.2026 14:00 Uhr Klausur 1.PZ C 635 und C 639 -
30.09.2026 14:00 Uhr Klausur 2.PZ Labore 6. Etage C-Gebäude -

Code aus der Vorlesung

Code aus der Vorlesung 07.04.2026
package vorlesungen.vorlesung0407;

import java.util.Arrays;
import javax.swing.JOptionPane;

public class Vorlesung0407
{

    public static void main(String[] args)
    {
        int[] numbers = {1, 2,  3, 4, 5, 6, 7, 8, 9, 10};
         for(int element : numbers)
         {
             System.out.println(element);
             element = 8;
         }
         int b = 1;
         int a;
         if(b%2==0)
         {
             a = 0;
         }
         else
         {
             a = 1;
         }
         System.out.println(a);
         String s1 = Arrays.toString(numbers);
         System.out.println(s1);


         String s2 = "Hello \"FIW\"! \nNaechste Zeile";
         System.out.println(s2);

         String s3 = """
                Hello "FIW"
                Naechste Zeile
                    eingerueckt
                        noch mehr eingerueckt""";
         System.out.println(s3);

         /*
         JOptionPane.showMessageDialog(null, "Hallo FIW!", 
                 "Eigener Titel", 
                 JOptionPane.ERROR_MESSAGE);

         String input = JOptionPane.showInputDialog("Geben Sie eine Zahl ein:");
         System.out.println("Sie haben eine " + input + " eingegeben");
         */

         int antwort = JOptionPane.showConfirmDialog(null, "Wollen Sie beenden?");
         if(antwort == JOptionPane.YES_OPTION)
         {
             System.out.println("Ja geklickt");
         }
         else if(antwort == JOptionPane.NO_OPTION)
         {
             System.out.println("Nein geklickt");
         }
         else if(antwort == JOptionPane.CANCEL_OPTION)
         {
             System.out.println("Abbrechen geklickt");
         }
         System.out.println("Ende");

         Circle c1 = new Circle(5.0);
         Circle c2 = new Circle(6.0);
         Circle c3 = new Circle(5.0);

         System.out.println(c1.toString());
         System.out.println(c1.equals(c2));
         System.out.println(c1.equals(c3));

         System.out.println(c1.radius());
    }

}
package vorlesungen.vorlesung0407;

public record Circle(double radius)
{

}
package vorlesungen.vorlesung0407;

public class Test
{
    public void objMethod()
    {
        System.out.println("Objektmethode");
    }

    public static void classMethod()
    {
        System.out.println("Klassenmethode");
    }

}
/**
 * 
 */
module SoSe26   // heisst wie das Projekt
{
    requires java.desktop;
}
Code aus der Vorlesung 14.04.2026
package vorlesungen.vorlesung0414;

import javax.swing.JOptionPane;

public class Vorlesung0414
{
    /*
    public static boolean isWeekend(String day)
    {
        return (day.equals("Samstag") || day.equals("Sonntag"));

    }
    */

    public static boolean isWeekend(Tag day)
    {
        return (day.equals(Tag.SAMSTAG) || day.equals(Tag.SONNTAG));    

    }

    public static void main(String[] args)
    {
        Tag day = Tag.MONTAG;

        System.out.println(isWeekend(day));

        Integer i1 = new Integer(100);
        Integer i2 = new Integer("100");

        Integer i3 = Integer.valueOf(100);
        Integer i4 = Integer.valueOf("100");

        Integer i5 = 100;

        System.out.println(i3.toString());
        System.out.println(i4.toString());
        System.out.println(i5.toString());

        System.out.println(i3.equals(i4));

        Integer i6 = 5000;
        Integer i7 = 5000;
        System.out.println(i6 == i7);   // false
        System.out.println(i6.equals(i7));  // true
        System.out.println(i3 == i4);

        int iw1 = i6.intValue();
        int iw2 = i7;

        String s1 = Integer.toString(iw1);

        String input = JOptionPane.showInputDialog("Geben Sie eine Zahl ein:");

        int number = Integer.parseInt("1234");
        System.out.println("Sie haben eine " + number + " eingegeben");

    }

}
package vorlesungen.vorlesung0414;

public enum Tag
{
    MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG, SAMSTAG, SONNTAG
}
Code aus der Vorlesung 21.04.2026
package vorlesungen.vorlesung0421;

import javax.swing.JOptionPane;

public class Vorlesung0421
{
    public static int divide(int nr1, int nr2) throws ArithmeticException
    {
            return nr1/nr2;
    }

    public static char charAt(String s, int index) throws StringIndexOutOfBoundsException
    {

        return s.charAt(index);
    }

    public static void main(String[] args)
    {
        int number1 = 7;
        int number2 = 0;


            System.out.println(number1 + "/" + number2 + " = " + divide(number1, number2));



        try {
            System.out.println(charAt("Hallo", 5));
            System.out.println("hat geklappt");
        }
        catch(StringIndexOutOfBoundsException e)
        {
            System.out.println("kein korrekter Index");
        }

        boolean inputOk = false;
        int zahl = 0;
        String message = "Geben Sie eine Zahl ein :";
        while(!inputOk)
        {
            String input = JOptionPane.showInputDialog(message);

            try {
                zahl = Integer.parseInt(input);
                inputOk = true;
            }
            catch(NumberFormatException e)
            {
                //JOptionPane.showMessageDialog(null, "Das war keine Zahl!");
                message = "Das war keine Zahl! Bitte nochmal";
            }
        }
        System.out.println("Sie haben eine " + zahl + " eingegeben.");


        System.out.println("Programmende");
    }

}
Code aus der Vorlesung 28.04.2026
package vorlesungen.vorlesung0428;

public class Vorlesung0428
{


    public static void main(String[] args)
    {
        String[] basen = {"2", "8", "10", "Hi"};
        int base = 0;
        double result = 0;
        for(int index = 0; index <= basen.length; index++)
        {
            try {
                base = Integer.parseInt(basen[index]);
            }
            /*
            catch(NumberFormatException e) {
                //System.out.println("keine Zahl!");
                //System.out.println(e.getMessage());
            }
            catch(ArrayIndexOutOfBoundsException e)
            {
                //System.out.println("index ausserhalb!");
                //System.out.println(e.getMessage());
            }
            */
            catch(RuntimeException e)
            {
                System.out.println("RuntimeException");
                System.out.println(e.getMessage());
            }
            catch(Exception e)
            {
                System.out.println("Exception");
            }
            for(int exp = 0; exp < 6; exp++)
            {
                result = Math.pow(base,  exp);
                System.out.printf("%d ^ %d = %.0f %n", base, exp, result);
            }

            Triangle t = null;
            boolean objektErzeugt = false;

            try {
                t = new Triangle(3,4,-8);
                objektErzeugt = true;
            }
            catch(IllegalSideLengthException e)
            {
                System.out.println(e.getMessage());
            }
            catch(IllegalTriangleException e)
            {
                System.out.println(e.getMessage());
            }
            if(objektErzeugt) // if(t != null)
            {
                // t kann verwendet werden
            }


        }
    }
}
package vorlesungen.vorlesung0428;

public class Triangle
{
    private int a, b , c;

    public Triangle(int a, int b, int c) throws IllegalSideLengthException, IllegalTriangleException
    {
        if(a <= 0 || b <= 0 || c <= 0)
        {
            //throw new IllegalArgumentException("Seiten muessen groesser als 0 sein!");
            throw new IllegalSideLengthException("Seitenlaengen " + a + ", " + b + ", " 
            + c + " muessen ALLE > 0 sein!");
        }
        else if((a+b) <= c || (b+c) <= a || (a+c) <= b)
        {
            //throw new IllegalArgumentException("kein Dreieck!");
            throw new IllegalTriangleException();
        }
        else
        {
            this.a = a;
            this.b = b;
            this.c = c;
        }
    }
}
package vorlesungen.vorlesung0428;

public class IllegalSideLengthException extends Exception
{
    public IllegalSideLengthException(String message)
    {
        super(message);
    }

    public IllegalSideLengthException()
    {
        super("Seiten muessen groesser als 0 sein!");
    }

}
package vorlesungen.vorlesung0428;

public class IllegalTriangleException extends Exception
{
    public IllegalTriangleException(String message)
    {
        super(message);
    }

    public IllegalTriangleException()
    {
        super("kein Dreieck!");
    }

}