Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Tennis-Punktesystem in Java: Eine Schritt-für-Schritt-Programmieranleitung für Studenten

Lerne, wie du ein Tennis-Scoring-System in Java programmierst – mit klaren Erklärungen zu Bedingungen, Zustandsmanagement und Spielregeln. Perfekt für Uni-Aufgaben wie COM S 2270.

Tennis Punktesystem Java Java Programmierung Tennis Tennis Scoring Programm COM S 2270 Java bedingte Anweisungen Zustandsmanagement Java Tennis Regeln Programmierung Java Übungsaufgabe Tennis Tennis Spielstand Logik Java if-else Tennis Tennis Simulation Java Programmieraufgabe Tennis Java für Studenten Tennis App Entwicklung Tennis Punktzähler Java Java Objektorientierung Tennis

Einführung in das Tennis-Scoring-Projekt

In diesem Tutorial lernst du, wie du ein Tennis-Punktesystem in Java implementierst – eine typische Programmieraufgabe für Kurse wie COM S 2270. Das Ziel ist es, die Logik hinter Punkten, Spielen, Sätzen und Matches zu verstehen und in einer Klasse namens Tennis umzusetzen. Dabei geht es vor allem um bedingte Anweisungen und die Verwaltung des internen Zustands. Stell dir vor, du entwickelst eine Punktestandsanzeige für ein Sport-Event – ähnlich wie bei einer Live-Score-App während der French Open 2026. Lass uns eintauchen!

Grundlagen des Tennis-Scorings

Bevor wir programmieren, müssen wir die Regeln verstehen. Im Tennis werden Punkte nicht linear gezählt: 0 (Love), 15, 30, 40. Bei Gleichstand (z.B. 15-15) sagt man „Fifteen-All“. Bei 40-40 heißt es „Deuce“. Ab dann braucht ein Spieler zwei Punkte Vorsprung, um das Spiel zu gewinnen – zuerst „Advantage“, dann der Siegpunkt. Ein Satz wird gewonnen, wenn ein Spieler mindestens 6 Spiele und zwei Spiele Vorsprung hat (Vorteilssatz) oder bei 6-6 ein Tiebreak entscheidet. Ein Match besteht aus mehreren Sätzen; bei Grand Slams wird im Entscheidungssatz ein Tiebreak bis 10 gespielt.

Projektaufbau: Die Tennis-Klasse

Erstelle eine Klasse Tennis mit den Spielern playerA und playerB. Du benötigst Methoden wie winPoint(boolean playerAWins), winGame(boolean playerAWins) und winSet(boolean playerAWins). Jede Methode aktualisiert den internen Zustand und gibt den aktuellen Punktestand aus. Der Aufbau ist modular: Punkte führen zu Spielen, Spiele zu Sätzen, Sätze zum Matchsieg.

Punktestand verwalten

Verwende Variablen für die Punkte jedes Spielers. Bei normalen Spielen sind die Punktwerte 0, 15, 30, 40. Bei Deuce und Advantage brauchst du eine spezielle Logik. Ein einfacher Ansatz: Speichere die Punkte als Integer (0-3) und behandle Sonderfälle mit if-Bedingungen. Beispiel:

int pointsA = 0, pointsB = 0;
if (playerAWins) {
    if (pointsA == 3 && pointsB < 3) {
        // Spiel gewonnen
    } else if (pointsA == 3 && pointsB == 3) {
        // Deuce: Advantage
    } else {
        pointsA++;
    }
}

Spiel- und Satzlogik

Nach jedem Punkt prüfst du, ob ein Spiel gewonnen wurde. Dazu gehören Bedingungen wie: Ein Spieler hat 40 und der Gegner weniger als 40, oder nach Deuce ein Vorsprung von zwei Punkten. Wenn ein Spiel gewonnen wird, erhöhst du die Spielanzahl und prüfst auf Satzgewinn: mindestens 6 Spiele und zwei Vorsprung, oder Tiebreak bei 6-6. Für den Tiebreak zählst du Punkte normal (0,1,2,...) und der Gewinner ist der erste mit 7 Punkten und zwei Vorsprung (bei Grand Slams 10).

Bedingte Logik im Detail

Die Herausforderung liegt in den vielen Sonderfällen. Nutze verschachtelte if-Anweisungen oder eine switch-Struktur. Ein häufiger Fehler ist das Vergessen der „Zwei-Punkte-Vorsprung“-Regel bei Deuce. Teste deine Logik mit Beispielen: Spieler A gewinnt 4 Punkte in Folge → Spiel gewonnen. Oder: Beide kommen auf 40, dann wechselt der Vorteil.

Integration mit aktuellen Trends

Stell dir vor, du entwickelst diese Logik für eine KI-gestützte Sport-App, die während der Wimbledon 2026 Live-Ergebnisse anzeigt. Oder du baust eine Mini-Simulation für ein Gaming-Turnier in der Schule. Solche Projekte sind ideal, um objektorientierte Programmierung und Zustandsautomaten zu üben – Fähigkeiten, die auch in der Finanzwelt (z.B. für Handelssysteme) oder bei der Entwicklung von Chatbots nützlich sind.

Häufige Fallstricke und Lösungen

  • Vergessen der Rückschlagregel: Nach jedem Spiel wechselt der Aufschlag. Bei Tiebreak wechselt der Aufschlag alle zwei Punkte.
  • Falsche Behandlung von Deuce: Speichere den Vorteil als separates Flag oder als Punktedifferenz.
  • Fehler bei Satzende: Prüfe immer, ob der Spieler bereits 6 Spiele hat und der Gegner maximal 4, außer bei 5-5 oder 6-5.

Beispielcode für winPoint

public void winPoint(boolean playerAWins) {
    if (playerAWins) {
        if (pointsA == 3 && pointsB == 3) {
            // Deuce: Advantage A
            advantageA = true;
        } else if (advantageB) {
            advantageB = false; // zurück zu Deuce
        } else if (pointsA == 3 && pointsB < 3) {
            // Spiel gewonnen
            winGame(true);
        } else {
            pointsA++;
        }
    } else {
        // analog für Spieler B
    }
}

Testen mit Beispielszenarien

Erstelle eine Hauptmethode, die verschiedene Spielverläufe simuliert. Zum Beispiel: Spieler A gewinnt die ersten 4 Punkte → Ausgabe: „Spiel gewonnen durch Spieler A“. Oder: Beide kommen auf 40, dann gewinnt A einen Punkt → „Advantage A“, dann B einen Punkt → „Deuce“, dann A zwei Punkte → „Spiel A“. So stellst du sicher, dass alle Regeln korrekt umgesetzt sind.

Erweiterungsmöglichkeiten

Du kannst die Klasse erweitern, um die Aufschlagreihenfolge zu verfolgen oder eine grafische Benutzeroberfläche hinzuzufügen. Oder du integrierst eine Datenbank, um Statistiken zu speichern – ein typisches Projekt für Fortgeschrittene. Mit diesen Grundlagen bist du bestens für die nächste Programmieraufgabe gerüstet.

Fazit

Die Implementierung eines Tennis-Scorings ist eine hervorragende Übung für bedingte Logik und Zustandsverwaltung in Java. Mit diesem Tutorial hast du das Rüstzeug, um die Aufgabe aus COM S 2270 zu meistern. Denk daran: Übung macht den Meister – probiere verschiedene Szenarien aus und erweitere den Code nach deinen Vorstellungen. Viel Erfolg!