Kann mir jemand hier helfen Java?

Destranix  07.10.2021, 17:11

Wie sieht dein Code denn bisher aus? (Du kannst die Frage ergänzen und den Code passend formattiert anfügen)

Stefan1942 
Fragesteller
 07.10.2021, 17:17

Kann das nicht ergänzen weil es scheinbar zu lang ist.

Destranix  07.10.2021, 17:22

Dann verlinkten. Auf pastebin beispielsweise. Wobei dein Code eigentlich nicht so lang sein sollte, aber der Aufgabentext ist schon lang vielleicht liegt es daran.

2 Antworten

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.


Stefan1942 
Fragesteller
 08.10.2021, 16:15

Danke dir

0
Stefan1942 
Fragesteller
 08.10.2021, 16:43
@daCypher

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?

0
daCypher  11.10.2021, 11:31
@Stefan1942

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());
}


0

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.


Stefan1942 
Fragesteller
 07.10.2021, 17:32

Okay danke

1