Kann mir jemand hier helfen Java?
Du möchtest ein Programm schreiben, dass dir aus den drei Noten, die du für eine Schularbeit, einen Test und die Mitarbeit bekommst, die Gesamtnote ausrechnet. Mathematisch bietet sich hier ein Mittelwert der Noten oder der häufigste Wert, der vorkommt, an. Du möchtest beide Noten ausgeben um bei Unklarheiten die nötige Argumentation dem Lehrer gegenüber zu haben.
1. * Erstelle ein Projekt MyGrade und in diesem Projekt eine Klasse Grades.
2. * Implementiere drei Objektvariablen, je eine für die Note der Schularbeit (gradeSchoolWork), die Note für den Test (gradeTest) und die Note der Mitarbeit (gradeParticipationInClass).
3. * Erstelle für die Instanzvariablen einen Konstruktor, in dem die drei Noten durch Übergabe- parameter festgelegt werden.
4. * Erstelle je eine get-Methode für die drei Instanzmethoden.
5. * Erstelle eine Methode, die den Mittelwert dieser drei Noten berechnet und diesen Wert als Integer zurückgibt. Runde in der Methode das Ergebnis der Berechnung auf Ganze. Bei einem Wert von größer gleich 3,5 wird die schlechtere Note – also 4 – zurückgegeben ansonsten die bessere – also 3.
7. * Erstelle eine Instanz der Klasse in der Mainmethode und gib das(die) Ergebnis(se) in der folgenden Form aus.
Kann mir jemand hier helfen bitte habe zwar die ersten 3 Punkte gemacht aber komme ab da nicht mehr weiter, zudem bin ich mir nicht mal sicher ob die ersten 3 richtig sind und ob es funktioniert.
Das habe ich bis jetzt.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Wie sieht dein Code denn bisher aus? (Du kannst die Frage ergänzen und den Code passend formattiert anfügen)
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Kann das nicht ergänzen weil es scheinbar zu lang ist.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Dann verlinkten. Auf pastebin beispielsweise. Wobei dein Code eigentlich nicht so lang sein sollte, aber der Aufgabentext ist schon lang vielleicht liegt es daran.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Ich habe bisher das https://pastebin.com/0SjHsfSE
2 Antworten
![](https://images.gutefrage.net/media/user/daCypher/1444744777_nmmslarge.jpg?v=1444744777000)
Außer ein paar optische Verbesserungen sieht der Code schon gut aus. Du könntest noch die überflüssigen Leerzeilen in den getter Methoden raus machen und die drei Zeilen im Konstruktor richtig einrücken.
Wie du den Durchschnitt berechnest, weißt du ja wahrscheinlich. Einfach alle drei Noten zusammenaddieren und das Ergebnis durch 3 teilen.
Die Funktion zum runden sollst du anscheinend selbst bauen, wenn ich die Aufgabe richtig verstehe. Dazu kannst du den ganzzahligen Teil des Durchschnitts vom Durchschnitt abziehen und hast dadurch nur noch den Nachkommaanteil. Bei dem kannst du prüfen, ob er >= 0.5 ist und entsprechend um 1 erhöhen oder nicht.
public int average()
{
double exactAverage = (gradeSchoolWork + gradeTest + gradeParticipationInClass) / 3.0;
if ((exactAverage - (int) exactAverage) >= .5)
{
return ((int) exactAverage) + 1;
}
return (int) exactAverage;
}
Falls ihr auch die integrierte runden-Funktion benutzen dürft, geht das natürlich viel einfacher.
public int average()
{
return Math.round((gradeSchoolWork + gradeTest + gradeParticipationInClass) / 3.0f);
}
Die Funktion für den häufigsten Wert weiß ich gar nicht, wie ich sie genau bauen sollte. Was ist denn, wenn jede Note anders ist und es keinen häufigsten Wert gibt?
Vielleicht so: ?
public int mostFrequent()
{
if (gradeSchoolWork == gradeTest || gradeSchoolWork == gradeParticipationInClass)
{
// wenn gradeSchoolWork genauso gut ist, wie eine der anderen Noten,
// gehört sie auf jeden Fall zu den häufigsten
return gradeSchoolWork;
}
else
{
// ansonsten sind vielleicht die anderen beiden Noten gleich
// in dem Fall gehört gradeTest zu den häufigsten.
// Falls alle drei Noten unterschiedlich sind, muss man ja
// trotzdem irgendwas zurückgeben, also warum nicht gradeTest
return gradeTest;
}
}
Die main-Methode kriegst du glaub ich selbst hin.
![](https://images.gutefrage.net/media/user/daCypher/1444744777_nmmslarge.jpg?v=1444744777000)
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Eine Frage hätte ich bei der Ausgabe von dem Ganzen. Die Main Methode sieht bei mir folgendermaßen aus: https://pastebin.com/MzpT6J89 Was müsste ich genau dafür machen, bei dem häufigsten Wert, und wenn ich das ganze Programm ausführe, kommt Gesamtnote (Mittelwert) : null was müsste ich dafür machen, dass da eine Zahl kommt?
![](https://images.gutefrage.net/media/user/daCypher/1444744777_nmmslarge.jpg?v=1444744777000)
Das wichtige an der Aufgabe ist "Erstelle eine Instanz der Klasse". Du hast eine statische Variable mit dem Namen "average" erstellt, die jetzt einfach ausgegeben wird. Dadurch, dass du der Variable keinen Wert zugewiesen hast, wird "null" ausgegeben.
Deine Klasse heißt ja "Grades". Davon machst du eine Instanz, z.B.
Grades grades = new Grades(4, 5, 5);
und dann kannst du die average und die mostFrequent Funktion vom neuen grades-Objekt aufrufen.
public static void main(String[] args) {
Grades grades = new Grades(4, 5, 5);
System.out.println("Gesamtnote (Mittelwert): " + grades.average());
System.out.println("Gesamtnote (häufigster Wert): " + grades.mostFrequent());
}
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Sieht soweit richtig aus.
Das mit dem Runden iest etwas komplizierter. Am Besten teilst du einmal nomal und berechnest einmal den rest. Ist der Rest größer gleich dem halben Divisor, dann addierst du 1 zum Ergebnis der Division.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Danke dir