Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Java Datei-I/O, Methoden und Arrays: Analyse von Filmkritiker-Daten (ICS 141 Assignment 6)

In diesem Tutorial lernst du, wie du in Java eine Textdatei mit Benutzerdaten einliest, in Objekte umwandelst und mit Methoden analysierst – genau wie in Assignment 6 der ICS 141. Wir zeigen dir Schritt für Schritt den Code für die User-Klasse, das Einlesen der Datei und die vier Auswertungsmethoden

Java Datei-I/O Methoden und Arrays ICS 141 Assignment 6 User-Klasse Java Datei einlesen Java Array von Objekten Durchschnittsalter berechnen Java Beruf zählen Java Männliche Benutzer zählen Java Programmierung Studium Objektorientierung Java Filmkritiker-Daten analysieren Java Übungsaufgabe Netflix Datenanalyse Beispiel Java für Anfänger Java Methoden schreiben

Java Datei-I/O, Methoden und Arrays: Analyse von Filmkritiker-Daten

Stell dir vor, du arbeitest für eine bekannte Film-Review-Plattform wie IMDb oder Letterboxd – nur dass du die Daten in einer Textdatei hast und sie mit Java auswerten musst. Genau das ist die Aufgabe in ICS 141 – 02 Assignment 6. Du lernst, wie du mit Datei-I/O, Methoden und Arrays umgehst, um echte Benutzerdaten zu analysieren. Klingt nach einem typischen Uni-Projekt? Ist es auch – aber mit den richtigen Tipps wird es zum Kinderspiel.

Warum dieses Thema heute wichtig ist

Im Mai 2026 nutzen Millionen Menschen täglich Plattformen wie Netflix, Amazon Prime und Disney+. Hinter den Kulissen verarbeiten Entwickler riesige Datenmengen – genau wie du in diesem Assignment. Ob du später an einer KI-gestützten Empfehlungsengine arbeitest oder einfach nur deine Java-Kenntnisse vertiefen willst: Datei-I/O und Objektorientierung sind unverzichtbar.

Schritt 1: Die User-Klasse definieren

Der erste Schritt ist die User-Klasse. Sie repräsentiert einen einzelnen Benutzer aus der Datei. Jede Zeile enthält fünf Werte: userID (int), age (int), sex (String), occupation (String) und zipCode (String).

public class User {
    private int userID;
    private int age;
    private String sex;
    private String occupation;
    private String zipCode;

    // Konstruktor
    public User(int userID, int age, String sex, String occupation, String zipCode) {
        this.userID = userID;
        this.age = age;
        this.sex = sex;
        this.occupation = occupation;
        this.zipCode = zipCode;
    }

    // Getter und Setter
    public int getUserID() { return userID; }
    public void setUserID(int userID) { this.userID = userID; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
    public String getSex() { return sex; }
    public void setSex(String sex) { this.sex = sex; }
    public String getOccupation() { return occupation; }
    public void setOccupation(String occupation) { this.occupation = occupation; }
    public String getZipCode() { return zipCode; }
    public void setZipCode(String zipCode) { this.zipCode = zipCode; }

    // toString() für tab-getrennte Ausgabe
    @Override
    public String toString() {
        return userID + "\t" + age + "\t" + sex + "\t" + occupation + "\t" + zipCode;
    }
}

Warum private Instanzvariablen? Weil sie die Daten kapseln – ein Grundprinzip der Objektorientierung. Die Getter und Setter ermöglichen den kontrollierten Zugriff. Die toString()-Methode ist praktisch, um später alle Benutzer auf der Konsole auszugeben.

Schritt 2: Daten aus der Textdatei in ein Array einlesen

Jetzt kommt der spannende Teil: Du liest die Datei Assignment-6-user-data.txt Zeile für Zeile ein und speicherst die Daten in einem Array von User-Objekten. Da die Datei maximal 200 Zeilen hat, deklarierst du ein Array der Größe 200.

import java.io.File;
import java.util.Scanner;

public class UserDataProcessingDriver {
    public static void main(String[] args) throws Exception {
        User[] usersArr = new User[200];
        int index = 0;

        File file = new File("Assignment-6-user-data.txt");
        Scanner scanner = new Scanner(file);

        while (scanner.hasNext() && index < usersArr.length) {
            int userID = scanner.nextInt();
            int age = scanner.nextInt();
            String sex = scanner.next();
            String occupation = scanner.next();
            String zipCode = scanner.nextLine().trim(); // Rest der Zeile

            usersArr[index] = new User(userID, age, sex, occupation, zipCode);
            index++;
        }
        scanner.close();

        // Test: Alle Benutzer ausgeben
        for (int i = 0; i < index; i++) {
            System.out.println(usersArr[i]);
        }
    }
}

Beachte: nextLine() nach next() liest den Rest der Zeile inklusive führender Leerzeichen – deshalb rufen wir trim() auf. So stellst du sicher, dass die Postleitzahl korrekt gespeichert wird.

Schritt 3: Methoden zur Analyse des Arrays

Im dritten Schritt schreibst du vier Methoden, die das User-Array durchgehen und bestimmte Werte berechnen. Diese Methoden werden in der Klasse UserDataProcessingDriver definiert und im main aufgerufen.

Methode 1: avgAge – Durchschnittsalter aller Benutzer

public static double avgAge(User[] users) {
    int sum = 0;
    int count = 0;
    for (User u : users) {
        if (u != null) {
            sum += u.getAge();
            count++;
        }
    }
    return (count == 0) ? 0.0 : (double) sum / count;
}

Diese Methode zählt alle nicht-null Einträge und berechnet den Durchschnitt. Warum null-Prüfung? Weil das Array 200 Plätze hat, aber vielleicht nicht alle belegt sind.

Methode 2: countOccupation – Anzahl der Benutzer mit einem bestimmten Beruf

public static int countOccupation(User[] users, String occupation) {
    int count = 0;
    for (User u : users) {
        if (u != null && u.getOccupation().equalsIgnoreCase(occupation)) {
            count++;
        }
    }
    return count;
}

Diese Methode ist nützlich, um z.B. zu ermitteln, wie viele Studenten oder Ingenieure in der Datenbank sind. equalsIgnoreCase macht die Suche unabhängig von Groß-/Kleinschreibung.

Methode 3: avgOccupationAge – Durchschnittsalter für einen bestimmten Beruf

public static double avgOccupationAge(User[] users, String occupation) {
    int sum = 0;
    int count = 0;
    for (User u : users) {
        if (u != null && u.getOccupation().equalsIgnoreCase(occupation)) {
            sum += u.getAge();
            count++;
        }
    }
    return (count == 0) ? 0.0 : (double) sum / count;
}

Diese Methode kombiniert die Ideen aus avgAge und countOccupation. Du filterst nach Beruf und berechnest dann den Durchschnitt.

Methode 4: countMaleBelowAge – Anzahl männlicher Benutzer unter einem bestimmten Alter

public static int countMaleBelowAge(User[] users, int ageLimit) {
    int count = 0;
    for (User u : users) {
        if (u != null && u.getSex().equalsIgnoreCase("M") && u.getAge() < ageLimit) {
            count++;
        }
    }
    return count;
}

Diese Methode ist ein Beispiel für mehrere Bedingungen in einer Schleife. Du zählst nur die Benutzer, die männlich sind und jünger als die angegebene Altersgrenze.

Alles zusammen: main-Methode mit Aufrufen

Jetzt rufst du die Methoden im main auf und gibst die Ergebnisse aus:

public static void main(String[] args) throws Exception {
    User[] usersArr = new User[200];
    int index = 0;

    File file = new File("Assignment-6-user-data.txt");
    Scanner scanner = new Scanner(file);

    while (scanner.hasNext() && index < usersArr.length) {
        int userID = scanner.nextInt();
        int age = scanner.nextInt();
        String sex = scanner.next();
        String occupation = scanner.next();
        String zipCode = scanner.nextLine().trim();
        usersArr[index] = new User(userID, age, sex, occupation, zipCode);
        index++;
    }
    scanner.close();

    // Methodenaufrufe
    double avg = avgAge(usersArr);
    System.out.println("Durchschnittsalter: " + avg);

    int studentCount = countOccupation(usersArr, "student");
    System.out.println("Anzahl Studenten: " + studentCount);

    double avgStudentAge = avgOccupationAge(usersArr, "student");
    System.out.println("Durchschnittsalter Studenten: " + avgStudentAge);

    int youngMaleCount = countMaleBelowAge(usersArr, 50);
    System.out.println("Männliche Benutzer unter 50: " + youngMaleCount);
}

Trend-Beispiel: Wie Netflix Benutzerdaten analysiert

Stell dir vor, Netflix möchte wissen, wie alt die Studenten sind, die Science-Fiction-Filme schauen. Mit einer ähnlichen Methode wie avgOccupationAge könnten sie das Durchschnittsalter ihrer Nutzer in einer bestimmten Kategorie berechnen. Im Mai 2026 setzen Streaming-Dienste verstärkt auf KI, um personalisierte Empfehlungen zu geben – aber die Grundlage sind immer noch solide Datenstrukturen wie Arrays und Objektorientierung.

Häufige Fehler und Tipps

  • NullPointerException: Vergiss nicht, auf null zu prüfen, bevor du auf Methoden eines Objekts zugreifst.
  • Datei nicht gefunden: Stelle sicher, dass die Textdatei im richtigen Verzeichnis liegt. In Eclipse am besten im Projektordner.
  • nextLine nach nextInt: Denk an den Zeilenumbruch – verwende nextLine() und trim().
  • Array-Größe: Dein Array hat 200 Plätze, aber die Datei könnte weniger Zeilen haben. Zähle die tatsächlichen Einträge mit einem Zähler.

Ausblick: Was du gelernt hast

Mit diesem Tutorial hast du die Grundlagen von Datei-I/O, Methoden und Arrays in Java gemeistert. Du kannst jetzt:

  • Eine Textdatei Zeile für Zeile einlesen
  • Daten in Objekte umwandeln und in einem Array speichern
  • Methoden schreiben, die das Array analysieren
  • Ergebnisse auf der Konsole ausgeben

Diese Fähigkeiten sind nicht nur für die Uni wichtig, sondern auch für echte Projekte – ob in der App-Entwicklung, im Data Science oder in der Spieleentwicklung. Viel Erfolg bei deinem Assignment!