1. Java Grundlagen
Aufgabe 1.1: Variablen und Datentypen
Deklariere und initialisiere passende Variablen für:
- Den Namen einer Person
- Das Alter (ganze Zahl)
- Den Kontostand (mit Nachkommastellen)
- Ob jemand volljährig ist
- Den ersten Buchstaben des Vornamens
💡 Lösung anzeigen
String name = "Max Mustermann";
int alter = 18;
double kontostand = 1234.56;
boolean istVolljaehrig = true;
char anfangsbuchstabe = 'M';
Aufgabe 1.2: Code-Ausgabe bestimmen
Was gibt folgender Code aus?
int a = 10;
int b = 3;
System.out.println(a / b);
System.out.println(a % b);
System.out.println(a / (double) b);
💡 Lösung anzeigen
3 (Integer-Division: 10/3 = 3 Rest 1)1 (Modulo: 10 % 3 = 1)3.3333333333333335 (Double-Division durch Cast)
Aufgabe 1.3: If-Else Bedingung
Schreibe eine If-Else-Struktur, die prüft, ob eine Note (1-6) bestanden ist (1-4 = bestanden).
💡 Lösung anzeigen
int note = 3;
if (note >= 1 && note <= 4) {
System.out.println("Bestanden!");
} else if (note == 5 || note == 6) {
System.out.println("Nicht bestanden!");
} else {
System.out.println("Ungültige Note!");
}
Aufgabe 1.4: For-Schleife
Schreibe eine For-Schleife, die alle geraden Zahlen von 2 bis 20 ausgibt.
💡 Lösung anzeigen
// Lösung 1: Mit Schrittweite 2
for (int i = 2; i <= 20; i += 2) {
System.out.println(i);
}
// Lösung 2: Mit Modulo-Prüfung
for (int i = 1; i <= 20; i++) {
if (i % 2 == 0) {
System.out.println(i);
}
}
Aufgabe 1.5: Array-Verarbeitung
Gegeben ist folgendes Array. Berechne die Summe und den Durchschnitt.
int[] zahlen = {5, 12, 8, 3, 17};
💡 Lösung anzeigen
int[] zahlen = {5, 12, 8, 3, 17};
int summe = 0;
for (int zahl : zahlen) {
summe += zahl;
}
double durchschnitt = (double) summe / zahlen.length;
System.out.println("Summe: " + summe); // 45
System.out.println("Durchschnitt: " + durchschnitt); // 9.0
Aufgabe 1.6: Methode schreiben
Schreibe eine Methode istPrimzahl(int n), die prüft, ob eine Zahl eine Primzahl ist.
💡 Lösung anzeigen
public static boolean istPrimzahl(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
// Aufruf:
System.out.println(istPrimzahl(7)); // true
System.out.println(istPrimzahl(12)); // false
2. Objektorientierte Programmierung
Aufgabe 2.1: Klasse erstellen
Erstelle eine Klasse Rechteck mit:
- Privaten Attributen:
laengeundbreite(double) - Einem Konstruktor mit beiden Parametern
- Getter-Methoden für beide Attribute
- Einer Methode
berechneFlaeche() - Einer Methode
berechneUmfang()
💡 Lösung anzeigen
public class Rechteck {
// Private Attribute
private double laenge;
private double breite;
// Konstruktor
public Rechteck(double laenge, double breite) {
this.laenge = laenge;
this.breite = breite;
}
// Getter-Methoden
public double getLaenge() {
return laenge;
}
public double getBreite() {
return breite;
}
// Flächenberechnung
public double berechneFlaeche() {
return laenge * breite;
}
// Umfangberechnung
public double berechneUmfang() {
return 2 * (laenge + breite);
}
}
Aufgabe 2.2: Vererbung
Erweitere Aufgabe 2.1: Erstelle eine Klasse Quadrat, die von Rechteck erbt.
Ein Quadrat hat nur eine Seitenlänge.
💡 Lösung anzeigen
public class Quadrat extends Rechteck {
// Konstruktor: Länge = Breite
public Quadrat(double seitenlaenge) {
super(seitenlaenge, seitenlaenge);
}
// Getter für Seitenlänge
public double getSeitenlaenge() {
return getLaenge(); // oder getBreite()
}
}
// Verwendung:
Quadrat q = new Quadrat(5);
System.out.println(q.berechneFlaeche()); // 25.0
System.out.println(q.berechneUmfang()); // 20.0
Aufgabe 2.3: Code-Analyse
Was gibt folgender Code aus? Erkläre warum.
public class Test {
private static int zaehler = 0;
private int nummer;
public Test() {
zaehler++;
nummer = zaehler;
}
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
Test t3 = new Test();
System.out.println(t1.nummer);
System.out.println(t2.nummer);
System.out.println(Test.zaehler);
}
}
💡 Lösung anzeigen
123
Erklärung:
zaehlerist static → wird von allen Objekten geteilt- Bei jedem
new Test()wirdzaehlerum 1 erhöht - t1.nummer = 1 (erster Aufruf)
- t2.nummer = 2 (zweiter Aufruf)
- Test.zaehler = 3 (nach drei Aufrufen)
3. Zahlensysteme
Aufgabe 3.1: Dezimal zu Binär
Wandle folgende Dezimalzahlen in Binärzahlen um:
- 42
- 127
- 200
💡 Lösung anzeigen
a) 42 → 101010₂
21 ÷ 2 = 10 Rest 1
10 ÷ 2 = 5 Rest 0
5 ÷ 2 = 2 Rest 1
2 ÷ 2 = 1 Rest 0
1 ÷ 2 = 0 Rest 1
Von unten nach oben: 101010
b) 127 → 1111111₂
c) 200 → 11001000₂
Aufgabe 3.2: Binär zu Dezimal
Wandle folgende Binärzahlen in Dezimalzahlen um:
- 1011₂
- 11001₂
- 10101010₂
💡 Lösung anzeigen
a) 1011₂ → 11
= 8 + 0 + 2 + 1 = 11
b) 11001₂ → 25
= 16 + 8 + 0 + 0 + 1 = 25
c) 10101010₂ → 170
= 128 + 32 + 8 + 2 = 170
Aufgabe 3.3: Hexadezimal-Umwandlungen
Führe folgende Umwandlungen durch:
- 255₁₀ → Hexadezimal
- A3₁₆ → Dezimal
- FF₁₆ → Binär
💡 Lösung anzeigen
a) 255₁₀ → FF₁₆
15 ÷ 16 = 0 Rest 15 → F
Ergebnis: FF
b) A3₁₆ → 163
= 10×16 + 3×1
= 160 + 3 = 163
c) FF₁₆ → 11111111₂
FF = 1111 1111 = 11111111
Aufgabe 3.4: Binäre Addition
Berechne:
- 1011 + 0110
- 1111 + 0001
💡 Lösung anzeigen
a) 1011 + 0110 = 10001
+ 0110
------
10001
Probe: 11 + 6 = 17 ✓ (10001₂ = 17)
b) 1111 + 0001 = 10000
+ 0001
------
10000
Probe: 15 + 1 = 16 ✓ (10000₂ = 16)
4. Logik
Aufgabe 4.1: Wahrheitstabelle erstellen
Erstelle die Wahrheitstabelle für: (A AND B) OR (NOT A AND C)
💡 Lösung anzeigen
| A | B | C | A AND B | NOT A | NOT A AND C | Ergebnis |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 0 | 0 | 1 |
Aufgabe 4.2: De Morgan anwenden
Vereinfache mit De Morgan: NOT (A AND B)
💡 Lösung anzeigen
NOT (A AND B) = (NOT A) OR (NOT B)
In Java: !(a && b) = (!a || !b)
Aufgabe 4.3: Logischen Ausdruck auswerten
Gegeben: A = true, B = false, C = true
Berechne: A OR B AND NOT C
💡 Lösung anzeigen
Priorität: NOT → AND → OR
- NOT C = NOT true = false
- B AND (NOT C) = false AND false = false
- A OR (B AND NOT C) = true OR false = true
Ergebnis: true
5. UML
Aufgabe 5.1: UML zu Java
Übersetze folgendes UML-Diagramm in Java-Code:
- inhaber: String
- saldo: double
+ einzahlen(betrag: double): void
+ abheben(betrag: double): boolean
+ getSaldo(): double
💡 Lösung anzeigen
public class Konto {
// Attribute (alle private)
private int kontonummer;
private String inhaber;
private double saldo;
// Konstruktor
public Konto(int nr, String inhaber) {
this.kontonummer = nr;
this.inhaber = inhaber;
this.saldo = 0.0;
}
// Methoden
public void einzahlen(double betrag) {
if (betrag > 0) {
saldo += betrag;
}
}
public boolean abheben(double betrag) {
if (betrag > 0 && saldo >= betrag) {
saldo -= betrag;
return true;
}
return false;
}
public double getSaldo() {
return saldo;
}
}
Aufgabe 5.2: Text zu UML
Erstelle ein Klassendiagramm für:
"Ein Auto hat eine Marke, ein Modell und ein Baujahr. Es kann starten, fahren und bremsen. Jedes Auto hat einen Motor mit einer bestimmten PS-Zahl."
💡 Lösung anzeigen
Zwei Klassen mit Komposition (Auto besteht aus Motor):
- modell: String
- baujahr: int
- motor: Motor
+ fahren(): void
+ bremsen(): void
Beziehung: Auto ◆——— Motor (Komposition: "hat einen")
Aufgabe 5.3: Beziehungen erkennen
Welche UML-Beziehung passt am besten?
- Universität – Student
- Buch – Seite
- Hund – Tier
- Firma – Mitarbeiter
💡 Lösung anzeigen
a) Universität – Student: Aggregation (◇)
Studenten können existieren, auch wenn die Uni schließt.
b) Buch – Seite: Komposition (◆)
Seiten können nicht ohne das Buch existieren.
c) Hund – Tier: Vererbung (△)
"Ein Hund ist ein Tier" – Generalisierung
d) Firma – Mitarbeiter: Aggregation (◇)
Mitarbeiter können die Firma wechseln.
6. Gemischte Prüfungsaufgaben
Aufgabe 6.1: Code vervollständigen
Vervollständige die Methode, die das Maximum eines Arrays zurückgibt:
public static int findeMaximum(int[] zahlen) {
// Hier Code ergänzen
}
💡 Lösung anzeigen
public static int findeMaximum(int[] zahlen) {
int max = zahlen[0];
for (int i = 1; i < zahlen.length; i++) {
if (zahlen[i] > max) {
max = zahlen[i];
}
}
return max;
}
Aufgabe 6.2: Fehler finden
Finde und korrigiere die Fehler im folgenden Code:
public class Person {
String name;
int alter
public Person(String n, int a) {
name = n;
alter = a
}
public void setAlter(int a) {
if (a > 0)
alter = a;
System.out.println("Alter gesetzt");
}
}
💡 Lösung anzeigen
Fehler und Korrekturen:
- Zeile 3: Semikolon fehlt →
int alter; - Zeile 7: Semikolon fehlt →
alter = a; - Zeile 11-12: Fehlende Klammern bei if (nur erste Zeile wird ausgeführt)
public class Person {
String name;
int alter; // Semikolon
public Person(String n, int a) {
name = n;
alter = a; // Semikolon
}
public void setAlter(int a) {
if (a > 0) { // Klammer auf
alter = a;
System.out.println("Alter gesetzt");
} // Klammer zu
}
}
📋 Checkliste für die Prüfung
Java Grundlagen:
- ☐ 8 primitive Datentypen kennen
- ☐ Variablen deklarieren und initialisieren
- ☐ Operatoren (+, -, *, /, %, ++, --)
- ☐ If-else und switch Strukturen
- ☐ for, while, do-while Schleifen
- ☐ Arrays erstellen und durchlaufen
- ☐ Methoden schreiben und aufrufen
OOP:
- ☐ Klassen mit Attributen und Methoden
- ☐ Konstruktoren (auch mit Parametern)
- ☐ Getter und Setter
- ☐ Vererbung (extends, super)
- ☐ Static-Keyword verstehen
Zahlensysteme:
- ☐ Dezimal ↔ Binär umwandeln
- ☐ Dezimal ↔ Hexadezimal umwandeln
- ☐ Binäre Addition
Logik:
- ☐ AND, OR, NOT, XOR Wahrheitstabellen
- ☐ Wahrheitstabellen erstellen
- ☐ De Morgan anwenden
UML:
- ☐ Klassendiagramme lesen und erstellen
- ☐ Sichtbarkeit: +, -, #
- ☐ Beziehungen: Assoziation, Aggregation, Komposition, Vererbung
- ☐ Aktivitätsdiagramme verstehen