# Mittelwert berechnen



## chris1985 (27. Nov 2010)

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:



```
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_


----------



## eRaaaa (27. Nov 2010)

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

Wieso eig. long? Du wirst so nie Kommazahlen erreichen können


----------



## Landei (27. Nov 2010)

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 +=


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


----------



## chris1985 (28. Nov 2010)

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


----------



## eRaaaa (28. Nov 2010)

Mit new erstellst du ein Objekt, in deinem Falle ein long-Array-Objekt 
Kannst ja vllt. mal das Kapitel in der Insel nachlesen: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 3.10 Arrays


----------



## Landei (28. Nov 2010)

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.


----------

