# Java Array - Durchschnitt



## meinnameist (25. Mai 2010)

Hallo Leute 

Ich hab ein kleines Problemchen, zu dem ich einen Lösungsansatz hätte, allerdings nicht weiß, wie ich den realisieren soll.
Ich habe ein Programm geschrieben, welches 20 Felder hat, wobei jedem Feld irgendeine zufällige Zahl zugeordnet wird.
Zudem soll dieses die kleinste, größte und die Durchschnittszahl ausgeben.
Bei der Durchschnittszahl hab ich jetzt ein kleines Problem.
Wie kriege ich denn jetzt alle 20 Zahlen zusammengerechnet?
Oder gibt es da irgend nen Code für, etc.?

Bin ein Anfänger und habt Verständnis


----------



## Gast2 (25. Mai 2010)

Du durchläufst dein Array und addierst alle Zahlen auf. Danach teilst du durch die Anzahl der Zahlen?


----------



## Final_Striker (25. Mai 2010)

mit einer schleife das array durchlaufen und den wert der felder addieren.


----------



## meinnameist (25. Mai 2010)

Okay, Vielen Dank 
Ich habs soweit, aber ich find meinen letzten kleinen Fehler nicht.

```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class zufallszahlen {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws NumberFormatException 
	 */
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader ein = new BufferedReader (new InputStreamReader(System.in));
int [] zufallszahlen = new int [20];
		
		System.out.println("Die 20 Zufallszahlen sind:");
	for (int i=0; i<zufallszahlen.length; i++){
	zufallszahlen[i] = 1+ (int)(99*Math.random());
	
	System.out.print(zufallszahlen[i]+"; ");
	
	}
	int max = zufallszahlen[0];
	for(int i=1; i<zufallszahlen.length;i++)
		if (zufallszahlen[i]>max)
			max = zufallszahlen[i];
           
           
           
	{
        System.out.println();
        System.out.println("Die größte Zahl ist die "+max);
        
           
          }
	{
		int min = zufallszahlen[0];
	for(int i=1; i<zufallszahlen.length;i++)
		if (zufallszahlen[i]<min)
			min = zufallszahlen[i];
	
	{
	System.out.println();
    System.out.println("Die kleinste Zahl ist die "+min);
	}
	{
		int summe = 0;
		for(int i=0; i<zufallszahlen.length;i++)
			{
			
			summe = summe + zufallszahlen[i];
		
			
		
		
	
			}
		System.out.println();
	    System.out.println("Der Mittelwert der Zahlen ist " +summe/20);
	}
	}
	}
	}
```


----------



## Final_Striker (25. Mai 2010)

du solltest mal an deiner Klammersetzung arbeiten, da blickt ja keiner durch


```
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class zufallszahlen {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
		int[] zufallszahlen = new int[20];

		System.out.println("Die 20 Zufallszahlen sind:");
		for (int i = 0; i < zufallszahlen.length; i++) {
			zufallszahlen[i] = 1 + (int) (99 * Math.random());

			System.out.print(zufallszahlen[i] + "; ");

		}
		
		int max = zufallszahlen[0];
		for (int i = 1; i < zufallszahlen.length; i++) {
			if (zufallszahlen[i] > max)
				max = zufallszahlen[i];
		}
			System.out.println();
			System.out.println("Die größte Zahl ist die " + max);

		
		int min = zufallszahlen[0];
		for (int i = 1; i < zufallszahlen.length; i++) {
			if (zufallszahlen[i] < min)
				min = zufallszahlen[i];

		}
		System.out.println();
		System.out.println("Die kleinste Zahl ist die " + min);

		double durchschnitt = 0;
		int summe = 0;
		for (int i = 0; i < zufallszahlen.length; i++) {

			summe += zufallszahlen[i];

		}
		durchschnitt = summe / (double)zufallszahlen.length;

		System.out.println();
		System.out.println("Der Mittelwert der Zahlen ist " + durchschnitt);

	}
}
```

Ach ja, Klassennamen fangen mit einem großen Buchstaben an. ;-)


----------



## Landei (25. Mai 2010)

```
import java.util.Random;

public class Zufallszahlen {

    public static void main(String[] args) {

        int[] zufallszahlen = new int[20];

        Random random = new Random();

        System.out.println("Die 20 Zufallszahlen sind:");
        for (int i = 0; i < zufallszahlen.length; i++) {
            zufallszahlen[i] = 1 + random.nextInt(99);
            System.out.print(zufallszahlen[i] + "; ");
        }
        System.out.println();

        int maximum = Integer.MIN_VALUE;
        for (int i : zufallszahlen) {
            maximum = Math.max(maximum, i);
        }

        System.out.println();
        System.out.println("Die größte Zahl ist die " + maximum);

        int minimum = Integer.MAX_VALUE;
        for (int i : zufallszahlen) {
            minimum = Math.min(minimum, i);
        }

        System.out.println();
        System.out.println("Die kleinste Zahl ist die " + minimum);

        int summe = 0;
        for (int i : zufallszahlen) {
            summe += i;
        }

        double durchschnitt = summe / zufallszahlen.length;

        System.out.println();
        System.out.println("Der Mittelwert der Zahlen ist " + durchschnitt);

    }
}
```

- Klassen groß schreiben
- keine überflüssigen {} einfügen
- Quellcode immer schön formatieren lassen, damit Klammerfehler leichter auffallen
- java.util.Random ist bequemer als Math.random()
- Vorhandene Funktionen nutzen (Math.min(), Math.max())
- erweiterte for-Schleife verwenden, wenn man keine Indizes braucht
- Was sollte das Einlesen von der Tastatur bringen? (Das geht übrigens besser mit java.util.Scanner)


----------



## lordstege (25. Mai 2010)

Hab das grad mal mit den Klammern in Ordnung gebracht, und auch mal alles rausgekegelt was da im Moment "unnötig" ist:


```
public class Zufallszahlen {

	public static void main(String[] args) {
		
		int [] zufallszahlen = new int [20];
		
		System.out.println("Die 20 Zufallszahlen sind:");
	
		// Zufallszahlen erzeugen
		for (int i=0; i<zufallszahlen.length; i++) {
			zufallszahlen[i] = 1+ (int)(99*Math.random());
			System.out.print(zufallszahlen[i]+"; ");
		}
	
		// Maximum bestimmen
		int max = zufallszahlen[0];
	
		for(int i=1; i<zufallszahlen.length;i++) {
			if (zufallszahlen[i]>max)
				max = zufallszahlen[i];
		} 
           
        System.out.println();
        System.out.println("Die größte Zahl ist die "+max);
	
		// Minimum bestimmen	
		int min = zufallszahlen[0];
	
		for(int i=1; i<zufallszahlen.length;i++) {
			if (zufallszahlen[i]<min)
				min = zufallszahlen[i];
		}
	
		System.out.println();
    	System.out.println("Die kleinste Zahl ist die "+min);
		
		int summe = 0;
		double durchschnitt = 0;
		
		// Durchschnitt berechnen
		for(int i=0; i<zufallszahlen.length; i++) {
			summe+=zufallszahlen[i];
		}
		
		durchschnitt = summe / zufallszahlen.length;
			
		System.out.println();
    	System.out.println("Der Mittelwert der Zahlen ist "+durchschnitt);
	}
}
```

Kurz zur Erklärung:
1. Mit den Klammern stimmte was nich. Ich kann dir nur wärmstens empfehlen deinen Quelltext von Anfang an sauber zu formatieren. Das erleichtert die Fehlersuche später ungemein.

2. Lass die geschweiften Klammern z. B. um die 
	
	
	
	





```
System.out.println(...)
```
 weg und setzte geschweifte Klammern nur da wo sie notwendig sind (Klassen, Methoden, Schleifen, if-else-Blöcke usw.)

3. Der Ansatz zur Berechnung des Durchschnitts war soweit schon richtig. Bis auf einen kleinen Fehler:
Du hast du die Variable 
	
	
	
	





```
int summe = ...
```
 im Schleifenkörper deklariert. Dadurch wird sie bei jedem Schleifendurchlauf wieder auf ihren Anfangswert gesetzt. Deshalb vor der Schleife deklarieren. ;-)

Hoffe konnte dir behilflich sein ...

edit: Da war wohl jemand schneller, und das sogar nich mit einigen guten Tips mehr ;-)

Gruß
lordstege


----------



## meinnameist (25. Mai 2010)

Habs eben noch selbst gerafft 

Ich füge meinen Code eben in meinem Startpost ein.
Vielen Dank!!


----------

