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: 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!