Mittelwert berechnen

  • Themenstarter Themenstarter chris1985
  • Beginndatum Beginndatum
C

chris1985

Gast
Hallo,

folgende Hausaufgabe (Uni) muss ich bearbeiten: Ich soll ein Programm schreiben, mit dem man den Mittelwert aus eingegebenen Werten berechnet. Die Anzahl der Laufzeitargumente ist nicht festgelegt. Folgenden Code habe ich bisher geschrieben:


Java:
  1 import java.util.Arrays;
  2
  3 public class Mittelwert {
  4
  5   public static long mittelwert(long[] zahlen) {
  6     long summe = 0;
  7     int zaehler = 0;
  8     for(int p = 0; p < zahlen.length; p++){
  9         summe = summe + zahlen[p];
 10         zaehler ++;
 11     }
 12   long ausgabe = summe / zaehler;
 13   return ausgabe;
 14   }
 15
 16   public static void main(String[] args) {
 17         long zahlen[];
 18         for(int i = 0; i < args.length; i++){
 19         zahlen[i] = Integer.parseInt(args[i]);
 20         }
 21
 22         System.out.println("Der Mittelwert von " + Arrays.toString(zahlen)
 23         + " ist: " + mittelwert(zahlen));
 24   }
 25
 26 }

Allerdings gibt der Compiler bei Zeile 19 und 22 einen Fehler aus:
Mittelwert.java:19: variable zahlen might not have been initialized
zahlen = Integer.parseInt(args);
^
Mittelwert.java:22: variable zahlen might not have been initialized
System.out.println("Der Mittelwert von " + Arrays.toString(zahlen)

Woran liegt das? Ich habe doch zahlen[] schon initialisiert? (Zeile 17)

Danke vorab für die Hilfe!

Liebe Grüße

Christian
 
Ne du hast deklariert!
[c]long zahlen[] = new long[args.length];[/c]

Wieso eig. long? Du wirst so nie Kommazahlen erreichen können 😉
 
Soll der Mittelwert wirklich ein long sein? Dann wäre der Mittelwert von 2 und 3 gleich 2, und nicht 2.5

Außerdem ist deine zaehler-Variable überflüssig, am Ende ist sie sowieso immer gleich der Array-Länge.

Den Index p verwendest du nicht innerhalb der Schleife, da kannst du auch die for-Schleifen-Kurzform mit : verwenden (falls ihr das schon hattet).

Um etwas zu einem Wert hinzuzurechenen, gibt es den Operator +=

Java:
   public static double mittelwert(long[] zahlen) {
      long summe = 0;
      for(long value : zahlen){
         summe += value;
      }
      return 1.0 * summe / zahlen.length;
  }
 
Hallo zusammen,

erst mal danke für die Antworten. Das Programm funktioniert! ;-)

Ja, laut Vorgabe sollen die Argumente Long sein, Kommawerte sollen entsprechend abgeschnitten werden.

Die Kurzform hatten wir noch nicht, aber danke für den Tipp! Ist echt einfacher!

Nur eine Frage habe ich noch. Das mit dem new habe ich zwar eingebaut, verstehe aber nicht, was das bewirkt. Aus meinen Unterlagen wurde ich auch nicht schlauer. ;-)

Liebe Grüße

Christian
 
Im Prinzip ganz simpel: [c]long zahlen[];[/c] sagt nur, dass zahlen eine Referenz auf ein long-Array ist (das ist eine "Deklaration"). Das Array selbst gibt es noch gar nicht (woher soll man an dieser Stelle z.B. wissen, wie lang es sein soll). Also muss man zahlen ein neues ("new") Array zuweisen, was man praktischerweise in der gleichen Zeile erledigen kann, wie eraaaa gezeigt hat (das wäre dann eine "Definition"). So ein neues Array hat dann eine feste Länge und ist bei Zahlen mit 0, bei booleans mit false, bei chars mir '\0' und bei Objekten mit null vorbelegt.
 

Zurück
Oben