Hilfe bei java summe und durchschnitt?

3 Antworten

eingabe ist vom Typ int und Summe vom Typ float. Die Typen müssen für die Zuweisung gleich sein.

Äpfel kann man uch nur mit Äpfeln und nicht mit Birnen zählen.

int ist eine Ganzzahl und float eine Dezimalzahl.

Verwende bei i mal int statt float.

Summe und Eingabe als float definieren

Woher ich das weiß:Berufserfahrung
er soll die summe und den durschnitt am ende ausgeben und soll stoppen sobald man die zahl 0 eingibt;

Dann sollten Berechnung und Ausgabe auch erst nach der Schleife stattfinden.

Wenn du eine Zahl eingegeben hast, zählst du i hoch, soweit so gut. Nach 5 Werten (+ abschließende 0) ist i=6. Du willst aber nur den Durchschnitt der ersten 5 Werte (ohne die Null) haben. Das sollte dein Programm berücksichtigen.

Mal abgesehen davon dass ich für Summe und i einen int nehmen würde, liegt das Problem halt dadrin dass du, wie auch in der Fehlermeldung steht die Variable nicht initialisiert hast.

Du solltest beim erstellen einen Wert zuweisen. 0 wäre sinnvoll.(bzw. 0.0f)

Außerdem, vor einem semicolon kein komma.


Schachpapa  03.10.2019, 19:08

Stimme dir zu für i lieber ein int zu nehmen, da man nur eine ganzzahlige Anzahl von Werten haben kann.

Bei summe würde ich es aber bei float belassen, da sonst das Ergebnis falsch wird. Da int / int -> int werden die Nachkommastellen abgeschnitten, der Durchschnit von 3, 3 und 5 wäre 3 statt 3,666...

0
jort93  03.10.2019, 20:32
@Schachpapa

Da stimme ich nicht zu.

Besser ist dort einmal explizit zu einem float zu casten.

Int's sind genau. Bei einem float kannste Rundungsfehler haben. Lieber einmal casten als immer wider Runden.

Floats können ja nicht alle Ganzzahlen genau Darstellen.

0
Schachpapa  03.10.2019, 21:45
@jort93

Ein Java-Anfänger dieser Stufe weiß nicht was casten ist.

floats können Ganzzahlen richtig darstellen, umgekehrt nicht.

Wenn floats als Eingabe erlaubt sind, muss summe natürlich ebenfalls float sein. Wenn nicht, hat man als Anfänger ein Problem, da der Durchschnitt von int meistens keine glatte Ganzzahl ist. Wenn die ints in einem float aufaddiert werden (implizites cast von int nach float), wird man zu dieser frühen Lernstufe noch nicht mit diesem Problem belastet.

0
jort93  03.10.2019, 23:51
@Schachpapa

Wie ein java anfänger weiß nicht was casten ist? was lernt er denn überhaupt? Wenn er das nicht weiß sollte er es aber schnell lernen.

Floats können ganzzahlen NICHT darstellen, zumindest nicht alle. Viele ganzzahlen können floats nur annähren. Ein float ist halt eine zahl im format "+-1.xxxxxxxxx * 2^xxxx". Damit lassen sich manche ganzen zahlen darstellen, andere nicht. Das kann fehler geben die sich halt mit der zeit aggregieren.

0
jort93  04.10.2019, 00:09
@Schachpapa

Wenn du ein praktisches beispiel willst, führe mal

System.out.println("19125111 = " + (int)((float)19125111));

in java aus.

Floats können manche ganzen zahlen nicht darstellen, deshalb geht das schief. Die zahl 19125111 kann nicht als 32 bit float gespeichert werden. als double geht es dann aber wieder.

System.out.println("19125111 = " + (int)((double)19125111));
0
Schachpapa  04.10.2019, 07:35
@jort93

Ja, du hast Recht. Ab 16777217 (= 2^24) kommt float nicht mehr mit. Wenn sich deine Eingaben in dieser Größenordnung bewegen, dann nützt dir aber auch das casten bei der Durchschnittsberechnung nichts mehr, die wird dann ebenso falsch. Also besser gleich double nehmen. Dann klappt's in jedem Fall.

Zum Lernfortschritt dieses Fragers: Ich würde sagen, dass er in diesem Schuljahr erstmalig mit Programmieren Kontakt hat. Das Schuljahr hat vor 5 Wochen angefangen. Er lernt gerade Schleifen. Man setzt sich nicht als Allererstes mit der internen Bit-Darstellung von Integern und Floats auseinander. Vielleicht überhaupt nicht. In dieser Stufe gilt: int sind Ganzzahlen bis ca. 2 Mrd, long bis ca. 18 Stellen, Floats sind Kommazahlen mit ca 7 gültigen Stellen, double ist doppelt so genau. Das reicht für den Hausgebrauch.

0
jort93  04.10.2019, 09:04
@Schachpapa

Warum sollten sich eingaben nicht in der größenordnung bewegen? man kann beliebige zahlen eingeben.

Floats sind Kommazahlen mit ca 7 gültigen Stellen, double ist doppelt so genau.

Naja, floats(und doubles), sind genauer wenn die zahlen klein sind. je höher desto ungenauer. Bei hohen zahlen wie 19125111 hast du garkeine "gültigen" nachkommastellen mehr, sondern die sprünge sind halt schon sehr groß.

0