Übung 1 von 7
⚔️ Challenge: Steckbrief
Zeit, dein Wissen zu testen! Nutze alles was du bisher gelernt hast.
Erstelle Variablen für einen Steckbrief und gib sie so aus:
Name: Java-Dev
Alter: 20
Sprache: Java
Die Variablen sind schon da. Du musst nur die drei println-Zeilen ergänzen.
Startcode
void main() {
String name = "Java-Dev";
int alter = 20;
String sprache = "Java";
// Gib die drei Zeilen aus:
// Name: Java-Dev
// Alter: 20
// Sprache: Java
}
Hintergrund
Warum Challenges?
Programmieren lernt man nicht durch Lesen, sondern durch aktives Problemlösen. Challenges kombinieren mehrere Konzepte — genau wie echte Programmieraufgaben.
In der Praxis wirst du nie nur eine Variable erstellen. Du wirst Variablen mit Ausgaben, Berechnungen und Bedingungen kombinieren. Diese Challenges bereiten dich darauf vor.
Übung 2 von 7
⚔️ Challenge: Zahlenreihe
Kombiniere Schleifen mit Bedingungen!
Gib die Zahlen 1 bis 20 aus, aber überspringe alle Zahlen die durch 3 teilbar sind.
Erwartete Ausgabe:
1 2 4 5 7 8 10 11 13 14 16 17 19 20
Tipp: Nutze continue; — das überspringt den Rest des Schleifendurchlaufs.
Startcode
void main() {
for (int i = 1; i <= 20; i++) {
// Ueberspringe Zahlen die durch 3 teilbar sind
IO.print(i + " ");
}
}
Hintergrund
break und continue
break; bricht die gesamte Schleife ab. continue; überspringt nur den aktuellen Durchlauf und springt zum nächsten.
In verschachtelten Schleifen wirken beide nur auf die innerste Schleife. Mit Labels kannst du auch äußere Schleifen ansprechen: outer: for (...) { ... break outer; }
Übung 3 von 7
⚔️ Challenge: Mini-Rechner
Schreibe eine Methode rechne, die zwei Zahlen und einen Operator bekommt und das Ergebnis zurückgibt.
Unterstützte Operatoren: +, -, *
Erwartete Ausgabe:
15
3
54
Startcode
int rechne(int a, int b, char op) {
// Gib a+b, a-b oder a*b zurueck
// je nach op ('+', '-' oder '*')
return 0;
}
void main() {
IO.println(rechne(10, 5, '+'));
IO.println(rechne(10, 7, '-'));
IO.println(rechne(6, 9, '*'));
}
Hintergrund
char — der Zeichentyp
char speichert ein einzelnes Unicode-Zeichen in 2 Bytes. Chars stehen in einfachen Anführungszeichen: 'A'. Strings in doppelten: "A".
Da char ein primitiver Typ ist, darfst du hier tatsächlich == zum Vergleichen nutzen. Das geht bei Strings nicht!
Übung 4 von 7
⚔️ Challenge: Notenspiegel
Erstelle eine Klasse Schueler mit:
- Feld
name (String)
- Feld
note (int)
- Konstruktor der beides setzt
- Methode
bewertung() die zurückgibt: "bestanden" wenn note ≤ 4, sonst "durchgefallen"
Erwartete Ausgabe:
Anna: bestanden
Tom: durchgefallen
Startcode
void main() {
Schueler a = new Schueler("Anna", 2);
Schueler b = new Schueler("Tom", 5);
IO.println(a.name + ": " + a.bewertung());
IO.println(b.name + ": " + b.bewertung());
}
class Schueler {
String name;
int note;
// Konstruktor
// Methode bewertung() -> "bestanden" oder "durchgefallen"
}
Hintergrund
Kapselung (Encapsulation)
In echtem Java-Code wären die Felder private und nur über Getter/Setter zugänglich. Das heißt Kapselung — du kontrollierst, wie von außen auf die Daten zugegriffen wird.
Beispiel: Ein Setter für note könnte prüfen, ob der Wert zwischen 1 und 6 liegt. Ohne Kapselung könnte jemand s.note = -5; setzen.
Übung 5 von 7
ArrayList
Arrays haben eine feste Größe. Eine ArrayList kann wachsen:
ArrayList<String> liste = new ArrayList<>();
liste.add("Hallo");
liste.add("Welt");
liste.size(); // 2
Füge die Zahl 30 zur Liste hinzu, damit die Größe 3 wird.
Startcode
import java.util.ArrayList;
void main() {
ArrayList<Integer> zahlen = new ArrayList<>();
zahlen.add(10);
zahlen.add(20);
// Fuege 30 hinzu
IO.println(zahlen.size());
}
Hintergrund
Generics und Wrapper-Klassen
ArrayList<Integer> — das <Integer> ist ein Generic. Es legt fest, welchen Typ die Liste enthält. Generics verhindern, dass du versehentlich falsche Typen einfügst.
Warum Integer statt int? Generics funktionieren nur mit Objekttypen. Integer ist die Wrapper-Klasse für int. Java konvertiert automatisch zwischen beiden (Auto-Boxing/Unboxing).
Übung 6 von 7
Try-Catch
Manchmal geht etwas schief — z.B. wenn du "abc" in eine Zahl umwandeln willst.
Mit try-catch fängst du den Fehler ab, statt dass dein Programm abstürzt:
try {
// Code der schiefgehen kann
} catch (Exception e) {
// Was bei Fehler passieren soll
}
Umschließe die fehlerhafte Zeile mit try-catch und gib im Fehlerfall Fehler! aus.
Startcode
void main() {
String text = "abc";
// Umschliesse die naechste Zeile mit try-catch
// Bei Fehler: "Fehler!" ausgeben
int zahl = Integer.parseInt(text);
IO.println(zahl);
}
Hintergrund
Checked vs. Unchecked Exceptions
Java unterscheidet zwei Arten: Checked Exceptions (z.B. IOException) müssen explizit gefangen oder deklariert werden. Unchecked Exceptions (z.B. NumberFormatException, NullPointerException) nicht.
In der Praxis nutzen viele Frameworks nur Unchecked Exceptions. Die Checked-Exception-Pflicht in Java ist umstritten — andere Sprachen (Kotlin, C#) haben sie gar nicht erst eingeführt.
Übung 7 von 7
FizzBuzz
Die berühmteste Aufgabe in Vorstellungsgesprächen.
Gib die Zahlen 1 bis 15 aus, aber:
- Teilbar durch 3 →
Fizz
- Teilbar durch 5 →
Buzz
- Teilbar durch 3 und 5 →
FizzBuzz
- Sonst → die Zahl
Tipp: Prüfe den FizzBuzz-Fall zuerst (teilbar durch 15)!
Tipp 2: % gibt den Rest. 15 % 3 == 0 heißt "15 ist durch 3 teilbar".
Startcode
void main() {
for (int i = 1; i <= 15; i++) {
// Deine if-else Kette hier
IO.println(i);
}
}
Hintergrund
FizzBuzz — mehr als eine Übung
FizzBuzz ist berühmt, weil es in Vorstellungsgesprächen zeigt, ob jemand grundlegende Programmierkonzepte beherrscht. Die Lösung erfordert Schleifen, Bedingungen und Modulo — und die richtige Reihenfolge der Prüfungen.
Fun Fact: Es gibt hunderte kreative Lösungen — mit Streams, Pattern Matching, oder sogar ohne if/else. Google mal "FizzBuzz Enterprise Edition" für die übertriebene Variante.