# Array Mittelwert berechnen, wie?



## Gelöschtes Mitglied 53953 (9. Nov 2016)

Möchte den Mittelwert von folgendem Array berechnen:


```
import java.util.*;

public class Temperaturwerte {
  public static void main(String[] args) {
    Scanner eingabe = new Scanner(System.in);

    System.out.println("Wie viele Temperaturwerte wollen Sie eingeben?");
    System.out.print("Ihre Eingabe: ");
   
    int anzahl = eingabe.nextInt();
    int[] tempWerte = new int[anzahl];
    System.out.println();  
    for (int x=0;x<tempWerte.length;x++) {
      System.out.print("Bitte geben Sie Temperaturwerte ein: ");
      tempWerte[x]=eingabe.nextInt();
    }
    System.out.println();
    int durchschnitt = tempWerte/anzahl;
    System.out.println(durchschnitt);
  } 
}
```

Doch so wie ich es unten versuche, bekomme ich einen Error.
Wie kann ich den Mittelwert der eingegebenen Werte berechnen?


----------



## mrBrown (9. Nov 2016)

Wie würdest du denn per Hand den Mittelwert einer Liste von Zahlen berechnen?


----------



## Nuiton (9. Nov 2016)

Indem du die Summe aller Array-Werte berechnest, und es durch die Anzahl dividierst.

```
int sum = 0;
    for (int x=0;x<tempWerte.length;x++) {
      System.out.print("Bitte geben Sie Temperaturwerte ein: ");
      tempWerte[x]=eingabe.nextInt();
      sum += tempWerte[x];
    }
    System.out.println();
    double durchschnitt = (double)(sum/tempWerte.length);
    System.out.println(durchschnitt);
```


----------



## Joose (9. Nov 2016)

philipp5821 hat gesagt.:


> Doch so wie ich es unten versuche, bekomme ich einen Error.


Im Forum bitte immer auch sagen welchen Error/Fehler man bekommt und nicht die anderen raten lassen. So kann schneller und gezielter geholfen werden


----------



## neoexpert (9. Nov 2016)

Man kann auch laufenden Mittelwert errechnen während man die Elemente in ein Array oder ArrayList hinzufügt:

```
ArrayList<Integer> l=new ArrayList<Integer>();
double avg=0;
public void add(Integer i){
l.add(i);
avg+=(i-avg)/l.size();
}
```
Dieses Vorgehen hat einen Geschwindigkeitsvorteil, da man nicht jedesmal das ganze Array durchsuchen muss.


----------



## InfectedBytes (9. Nov 2016)

neoexpert hat gesagt.:


> Dieses Vorgehen hat einen Geschwindigkeitsvorteil, da man nicht jedesmal das ganze Array durchsuchen muss.


Und einen gigantischen Nachteil, weil du damit extrem heftige Genauigkeitsprobleme bekommst.


----------



## neoexpert (9. Nov 2016)

Test:

```
import java.util.*;

public class Main
{
   
    public void add(Integer i){
        l.add(i);
        avg+=(i-avg)/l.size();
    }
    ArrayList<Integer> l=new ArrayList<Integer>();
    double avg=0;
   
    public static void main(String[] args)
    {
       
        Main m=new Main();
       
        while(true){
            for(int i=0;i<1000000;i++){
            m.add(10);
            m.add(0);
            }
            System.out.println("avg:"+m.avg);
        }
       
    }
   
}
```


----------



## neoexpert (9. Nov 2016)

Weiterer interessanter Test:

```
package src;



import java.util.*;

public class Main
{
   
    public void add(Integer i){
        l.add(i);
        avg+=(i-avg)/l.size();
    }
    ArrayList<Integer> l=new ArrayList<Integer>();
    double avg=0;
   
    public static void main(String[] args)
    {
       
        Main m=new Main();
       
        while(true){
            for(int i=0;i<1000000;i++){
            m.add(new Random().nextInt(11));
            //m.add(0);
            }
            System.out.println("avg:"+m.avg);
        }
       
    }
   
}
```


----------



## InfectedBytes (9. Nov 2016)

Was sollen denn das bitte für Tests sein?^^
Und was soll an random zahlen interessant sein? Zumal man nicht random objekte in einer Schleife erzeugt, nur um von jedem Random Objekt eine einzelne Zahl zu beziehen. Mach ein Random Objekt und fertig.

Softwaretests gehen anders: https://de.wikipedia.org/wiki/Softwaretest


----------

