Ich möchte das folgende Programm ohne den globalen Variablen sum und next schreiben.
Java:
staticint sum;staticint next;staticvoid countSquares (){
sum += next * next;}publicstaticvoid main (String[] arg){
sum =0;for(int i =1; i <=10; i++){System.out.println("zahl: ");
next =In.readInt();countSquares();}Out.println("Durchschnitt der Quadrate: "+ sum /10);}
Ich habe es so versucht:
Java:
publicstaticvoid main (String[] arg){int next=0;for(int i =1; i <=10; i++){System.out.println("zahl: ");
next =In.readInt();}System.out.println("Durchschnitt der Quadrate: "+average(next));}staticint average (int zahl){int sum=0;// ich denke hier liegt der fehler, wie beheben?
sum = sum +(zahl * zahl);return sum/10;}
Soweit ich es überblicke, macht das erste Beispiel das was du machen willst.
Beim zweiten passt aber vieles von der Logik nicht mehr. z.B. bedeutet
Java:
sum = sum +(zahl * zahl);
0 = 0 + (letzterWert * letzterWert);
deine ersten 9 Werte finden keinerlei Beachtung!
Hast du schonmal etwas von einem Struktogramm gehört, wenn ja, mache eines von deinem ersten Beispiel und versuche es dann für das zweite Beispiel Step by Step umzusetzen. Bzw. versuche einmal nachzuvollziehen wann welcher Wert in in welcher Variable steckt, sonst bekommst du nie ein Gespür dafür, wo wirklich der Fehler steckt.
ok, das erklärt einiges. Normalerweise lernt man erstmal sowas wie Struktogramme oder ähnliches, damit man die Logik auf Papier bekommt und auch selber die Logik erlernt. Mein Tipp, seh zu dass du dir Struktogramme aneignest, es wird dir helfen, besonders am Anfang. Die sind nicht schwer, da brauchst du kein Buch für.
Bis dahin kommentiere deine Quellcodes soviel wie möglich aus, auch wenn du denkst es wäre überflüssig. Ist es nicht. In einer Woche kannst du sonst deinen eigenen Code nicht mehr verstehen und wir können sehen, wo deine Denkfehler sind - denn um nichts anderes handelt es sich in den meisten Fällen! Du würdest es uns erleichtern DIR zu helfen!
liegt der Code bei Dir im Original auch so schlecht formatiert vor?
Wenn Du den Code hier anständig formatiert reinstellst tun sich andere auf jeden Fall leichter.
Dann fällst auch sofort auf, dass der Code was komplett anderes macht als der erste mit den globalen Klassenvariablen:
Java:
publicstaticvoidmain(String[] arg){int next =0;for(int i =1; i <=10; i++){System.out.println("zahl: ");
next =In.readInt();}System.out.println("Durchschnitt der Quadrate: "+average(next));}staticintaverage(int zahl){int sum =0;// ich denke hier liegt der fehler, wie beheben?
sum = sum +(zahl * zahl);return sum /10;}
Hier wird zehnmal eine Zahl eingelesen und die ersten neun direkt wieder verworfen. Mit der zehnten Zahl wird dann gerechnet und das Ergebnis ausgegeben.
Im ursprünglichen Code werden zehn Zahlen eingelesen, die Quadrate gebildet und aufsummiert. Aus der Gesamtsumme wird der Durchschnitt errechnet und ausgegeben.
Wenn man damit Probleme hat, nimmt man einfach mal ein Blatt Papier und einen Stift zur Hand und spielt Computer und "führt" den Code per Hand aus. Notiert sich bei jedem Schleifendurchgang die aktelle Werte des Schleifenzählers und sonstige relevante Werte.
Vielleicht noch so als Tipp: sum muss eine Variable in der main sein.
Eigentlich braucht man am ursprünglichen Code gar nicht viel verändern.
sum und next in der main deklarieren, die countSquare raus und eine Methode
Code:
int pow(int zahl)
rein, die eine Zahl entgegen nimmt und deren Quadrat zurück liefert...