====== Lösungsvorschlag: Notenberechnung ====== ===== TODO 1 ===== // TODO 1: Erstellen Sie eine Klasse "Note" mit folgenden Attributen: // Notenwert (1.0 -6.0), Datum, Gewichtung // TODO 1.1: Erstellen Sie sinnvolle Konstruktoren // TODO 1.2: Erstellen Sie sinnvolle getter/setter // TODO 1.3: Implementieren Sie die Methode toString(); // TODO 1.4: Comitten und Pushen Sie import java.time.LocalDate; /** * Eine Schulnote mit Wert, Gewichtung und Datum * @author Kevin Maurizi * @since 2042.01.01 * @version 0.1 */ public class Note { private double notenwert; private double gewichtung; private LocalDate datum; public Note(double notenwert, double gewichtung, LocalDate datum) { setNotenwert(notenwert); this.gewichtung = gewichtung; this.datum = datum; } public double getNotenwert() { return notenwert; } public void setNotenwert(double notenwert) { if(notenwert < 1.0 || notenwert > 6.0){ System.err.println("Die Note muss zwischen 1.0 und 6.0 liegen."); } this.notenwert = notenwert; } public double getGewichtung() { return gewichtung; } public void setGewichtung(double gewichtung) { this.gewichtung = gewichtung; } public LocalDate getDatum() { return datum; } public void setDatum(LocalDate datum) { this.datum = datum; } @Override public String toString() { return "Note{" + "notenwert=" + notenwert + ", gewichtung=" + gewichtung + ", datum=" + datum + '}'; } } Die ''setNotenwert(double notenwert)'' Methode beinhaltet eine Validierung (''notenwert < 1.0 || notenwert > 6.0''). Deshalb wird im Konstruktor die Methode aufgerufen um den Wert zu speichern und nicht ''this.notenwert = notenwert''. Damit lässt sich doppelter Code vermeiden und auch beim Erstellen der Note im Konstruktor wird die eingabe validiert. ===== TODO 2 ===== // TODO 2: Erstellen Sie die Klasse "Fach" mit folgenden Attributen // Liste von Noten, Name // TODO 2.1: Erstellen Sie sinnvolle Konstruktoren // TODO 2.2: Erstellen Sie sinnvolle getter/setter/adder // TODO 2.3: Implementieren Sie die Methode toString(); // TODO 2.4: Comitten und Pushen Sie import java.util.ArrayList; /** * Ein Schulfach mit einem Namen und einer Liste von Noten. * @author Kevin Maurizi * @since 2042.01.01 * @version 0.1 */ public class Fach { private String name; private ArrayList noten; public Fach(String name) { this.name = name; noten = new ArrayList<>(); } public void addNote(Note note){ noten.add(note); } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Fach{" + "name='" + name + '\'' + ", noten=" + noten + ", durchschnitt=" + berechneDurchschnitt() + '}'; } } ===== TODO 3 ===== // TODO 3: Erstellen Sie die Methode "berechneDurchschnitt()" die den Durchschnitt der Noten berechnet // unter berücksichtigung der Gewichtung! /** * Checkt ob die Summe der Gewichtungen 100% ergibt und gibt dann den Notenschnitt aus, wenn die Gewichtung * nicht 100% ergibt erscheint eine Fehlermeldung und der Durchschnitt ist -1. * @return Notenschnitt aus allen Noten in der Arraylist */ public double berechneDurchschnitt(){ double durchschnitt = 0; double gewichtungen = 0; for (Note note : noten) { gewichtungen = gewichtungen + note.getGewichtung(); durchschnitt = durchschnitt + note.getGewichtung()*note.getNotenwert(); } if(gewichtungen != 1){ System.err.println("Die Gewichtungen müssen in der Summe 100% ergeben!"); durchschnitt = -1; } return durchschnitt; } ===== TODO 4 & 5 ===== private void run() { // TODO 4: Erstellen Sie 2 Fächer mit jeweils 2-4 Noten und überprüfen Sie, ob alles korrekt funktioniert // (Erstellen, Durschnitt berechnen etc.). Fach fach1 = new Fach("Mathe"); Note note1 = new Note(5.5,0.5, LocalDate.of(2021,12,12)); fach1.addNote(note1); fach1.addNote( new Note(5.0,0.5, LocalDate.of(2021,12,12))); System.out.println(fach1.berechneDurchschnitt()); Fach fach2 = new Fach("Deutsch"); fach2.addNote( new Note(4.8,0.25, LocalDate.of(2021,12,12))); fach2.addNote( new Note(4.8,0.6, LocalDate.of(2021,12,12))); fach2.addNote( new Note(4.8,0.1, LocalDate.of(2021,12,12))); System.out.println(fach2.berechneDurchschnitt()); // TODO 5: Drucken Sie alle Fächer und Noten aus, verwenden Sie dazu ihre toString()-Methode System.out.println(fach1); System.out.println(fach2); }