Objektorientierte Programmierung

Bitte aktiviere JavaScript!
Ich hätte eine Frage zu einer Uniaufgabe bei der ich auf keinen grünen Zweig komme.
Die Aufgabe lautet wie folgt:
Definieren Sie dazu die Klassen Übungsblatt, Abgabe sowie Studierender.
Zu jedem Studierenden gehören Abgaben, die jeweils zu einem Übungsblatt gehören. Jedes Blatt hat eine maximale Punktzahl, jede Abgabe hat eine erreichte ein Studierender hat bestanden, wenn er entweder insgesamt mindestens 50 Punkte erreicht hat und dabei bei jeder seiner Abgaben mindestens 42% oder aber insgesamt mehr als 100 Punkte erzielt hat.
Schreiben Sie für die Klasse Studierender eine Methode hatBestanden, die zurückgibt, ob dieser Studierender nach den Kriterien bestanden hat.
Schreiben Sie eine weitere Klasse mit einer main-Methode, die ein Objekt der Klasse Studierender mit drei Abgaben für drei Übungsblättern erzeugt und anschließend ausgibt, ob der Studierende bestanden hat.
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Du hast doch schon drei Klassen vorgegeben bekommen. Versuch doch einmal, den Text nun einzelnen Klassen zuzuordnen.

Also den Text genau unterteilen in kleine Aussagen und diese dann einbauen:
"Zu jedem Studierenden gehören Abgaben," -> Was bedeutet das denn? Was wird hier denn ausgesagt?
" die jeweils zu einem Übungsblatt gehören." -> Und was bedeutet dies für die Abgaben?

So kannst Du dann erst einmal eine Art Klassendiagramm aufmalen und wenn Du das einmal hast, ist die Implementierung nur noch ein kleiner Schritt....
 
Wenn Du noch gar keinen Ansatz hast, spoiler ich mal. Wenn ich mich nicht vertu müsste es das sein:
Java:
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class Student {
	String mn;
	List<Abgabe> abgabes = new LinkedList<>();

	public Student(String mn) {
		super();
		this.mn = mn;
	}

	public void addAbgabe(Abgabe abgabe) {
		abgabes.add(abgabe);
	}

	public boolean hatBestanden() {
		int s = 0;
		boolean b = true;
		for (Abgabe abgabe : abgabes) {
			s += abgabe.aktuell;
			if (100.0 / abgabe.uebungsblatt.maximal * abgabe.aktuell < 42.0) {
				b = false;
			}
		}
		System.out.println(s);
		if (s >= 100 || (s >= 50 && b)) {
			return true;
		} else {
			return false;
		}
	}

	public static void main(String[] args) {
		Student[] students = { new Student("123"), new Student("456"), new Student("789"), };
		Random a = new Random();
		for (Student student : students) {
			for (Uebungsblatt uebungsblatt : Uebungsblatt.blaetter) {
				student.addAbgabe(new Abgabe(uebungsblatt, a.nextInt(uebungsblatt.maximal + 1)));
			}
		}
		for (Student student : students) {
			System.out.println(student.mn + " " + student.hatBestanden());
		}
	}
}

class Uebungsblatt {
	static final Uebungsblatt[] blaetter = { new Uebungsblatt("1", 30), new Uebungsblatt("1", 20),
			new Uebungsblatt("1", 50), new Uebungsblatt("1", 10), new Uebungsblatt("1", 30), };
	String id;
	int maximal;

	public Uebungsblatt(String id, int maximal) {
		super();
		this.id = id;
		this.maximal = maximal;
	}
}

class Abgabe {
	Uebungsblatt uebungsblatt;
	int aktuell;

	public Abgabe(Uebungsblatt uebungsblatt, int aktuell) {
		super();
		this.uebungsblatt = uebungsblatt;
		this.aktuell = aktuell;
	}
}
 
Wenn ich deine Lösung compiliere folgt folgende Fehlermeldung:
Exception in thread "main" java.lang.NoSuchMethodError: Abgabe.<init>(LUebungsblatt;I)V
at Student.main(Student.java:38)
 
Ich habe die Aufgabe nicht gelesen, aber @Tobias-nrw ein paar Punkte die mir beim kurzen überfliegen sofort ins Auge gestochen sind, falls konstruktive Kritik gestattet ist.
  1. Student "mn" würde ich ausschreiben. Man glaubt es kaum... , aber ich musste kurz überlegen was das sein könnte.
  2. Die Methode hatBestanden würde ich nicht ins Objekt Student packen.
  3. Die Methode main gehört für mich absolut nicht ins Objekt Student.
  4. Ein Übungsblatt ist für mich nur ein Blatt, eine Abgabe hat mehrere Übungsblätter.
  5. Übungsblatt.blätter ist nicht gerade Zukunftsorientiert.
 
Habe eure Ratschläge beherzigt - und alles nochmal neu geschrieben... (Bis auf die getter) Nun bekomme ich aber auch die volle Punktezahl. :D
Java:
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class Student {
	String matrikelnummer;
	List<Abgabe> abgabes = new LinkedList<>();

	public Student(String matrikelnummer) {
		super();
		this.matrikelnummer = matrikelnummer;
	}

	public void addAbgabe(Abgabe abgabe) {
		abgabes.add(abgabe);
	}

	public boolean hatBestanden() {
		int s = 0;
		boolean b = true;
		for (Abgabe abgabe : abgabes) {
			s += abgabe.aktuell;
			if (100.0 / abgabe.uebungsblatt.maximal * abgabe.aktuell < 42.0) {
				b = false;
			}
		}
		System.out.println(s);
		if (s >= 100 || (s >= 50 && b)) {
			return true;
		} else {
			return false;
		}
	}
}

class Uebungsblatt {
	String id;
	int maximal;

	public Uebungsblatt(String id, int maximal) {
		super();
		this.id = id;
		this.maximal = maximal;
	}
}

class Abgabe {
	Uebungsblatt uebungsblatt;
	int aktuell;

	public Abgabe(Uebungsblatt uebungsblatt, int aktuell) {
		super();
		this.uebungsblatt = uebungsblatt;
		this.aktuell = aktuell;
	}
}

class Professor {
	public static void main(String[] args) {
		/* 50 % der Studierenden werden bestehen */
		Uebungsblatt[] blaetter = { new Uebungsblatt("1", 37), new Uebungsblatt("2", 40), new Uebungsblatt("3", 50),
				new Uebungsblatt("4", 40), new Uebungsblatt("5", 32), };
		Student[] students = { new Student("123"), new Student("456"), new Student("789"), new Student("321"),
				new Student("654"), new Student("987"), };
		Random a = new Random(0);
		for (Student student : students) {
			for (Uebungsblatt uebungsblatt : blaetter) {
				student.addAbgabe(new Abgabe(uebungsblatt, a.nextInt(uebungsblatt.maximal + 1)));
			}
		}
		for (Student student : students) {
			System.out.println(student.matrikelnummer + " " + student.hatBestanden());
		}
	}
}
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben