# Maximum, Minimum und Mittelwert berechnen



## manu1588 (2. Apr 2008)

hi!

ich würde gerne beliebig viele zahlen in ein programm eingeben, welches wenn ich 0 eingebe, beendet wird, und von diesen zahlen möchte ich max, min und mittelwert haben. ich weiß dass es am besten mit einem array geht, ich habe es auch schon fast fertig nur der letzte zacken fehlt mir noch, könnt ihr mir helfen?

import java.util.Scanner;
public class maxminmittelwert {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int [] array = new int [300];

		Scanner a = new Scanner(System.in);
		Scanner b = new Scanner(System.in);

		int max = 0;
		int min = 0;
		double mittelwert = 0;
		double summe = 0;
		int i = 0;

		System.out.println("Bitte geben Sie eine Zahl ein");

		for (i =0; i<=10

		array_ = b.nextInt(); 

		summe = summe + array;

		i ++;
		if (array>max) {
			max = array;
		}

		if (array<min) {
			min = array;
		}

		mittelwert = summe / i;

		System.out.println("Maximum: " + max + ", Minimum: " + min + ", Mittelwert: " + mittelwert );
	}

}_


----------



## MiDniGG (2. Apr 2008)

also erstmal... diese for-"Schleife" geht so nicht. So ganz ohne Klammern und so.
min und max geht sicher mit Math.max() und Math.min()
wobei das ein bisschen umständlich werden könnte...

Auch musst du die "0" noch abfangen. Am Besten mit ner if-abfrage... Also wenn System.in.equals("0") dann alles nach dem System.out von dir oder irgendwie so... Keine Lust zu schaun wies richtig geht...


----------



## Niki (2. Apr 2008)

```
public static void main(String[] args) {
		// TODO Auto-generated method stub

		List<Integer> array = new ArrayList<Integer>();

		Scanner scanner = new Scanner(System.in);

		int max = 0;
		int min = 0;
		double mittelwert = 0;
		double summe = 0;

		int i = -1;
		do {
			System.out.println("Bitte geben Sie eine Zahl ein (0 für Abbruch)");
			String s = scanner.next();

			try {
				i = Integer.parseInt(s);
				if (i != 0)
					array.add(i);
			} catch (Exception ex) {
				i = -1;
			}
		} while (i != 0);

		boolean first = true;
		for (Integer next : array) {
			summe = summe + next;
			if (next > max)
				max = next;
			if (first){
				min = next;
                                first = false;
			}else if (next < min)
				min = next;			
		}

		mittelwert = summe / array.size();

		System.out.println("Maximum: " + max + ", Minimum: " + min
				+ ", Mittelwert: " + mittelwert);
	}
```


----------



## Noar (2. Apr 2008)

Hi,

noch zwei kleine Tips:

1. Klassennamen sollten IMMER mit einem Großbuchstaben beginnen (also in deinem Falle vielleicht "MaxMinMittelwert").

2. Verwende in Zukunft beim posten von Quellcode bitte die <Code>-Tags. Dann sieht es so aus wie bei Niki und ist für alle einfacher zu lesen.


----------



## MiDniGG (2. Apr 2008)

Sorry fehler bei mir im Browser... 

Beitrag kann gelöscht werden ^^


----------



## manu1588 (2. Apr 2008)

@niki

ist es denn nicht möglich, das ganze aus meinem code zu machen? dieser riesig lange neue funktioniert auch nicht gleich und bevor ich da fehler suche würde ich gerne meinen code funktionierend haben. bitte sehr, danke sehr

lg manu1588


----------



## Niki (2. Apr 2008)

was funktioniert nicht? bei mir funktioniert es, eventuell fehlen noch imports bei dir?


----------



## manu1588 (2. Apr 2008)

also es funktioniert jz alles bis auf den mittelwert und zwar mit folgendem code:


```
import java.util.Scanner;
public class maxminmittelwert {
	public static void main(String[] args) {
	// TODO Auto-generated method stub 

   int[] array = new int [300]; 

    Scanner s = new Scanner(System.in); 

    int max = 0; 
    int min = 0; 
    double mittelwert = 0; 
    double summe = 0; 

    int i = 0; {
    do { 
       System.out.println("Bitte geben Sie eine Zahl ein (0 für Abbruch)"); 
       array[i] = s.nextInt(); 
       
       for (Integer next : array) { 
          summe = summe + next; 
          if (next > max) 
             max = next; 
          if (next < min) 
             min = next; 
                                
       }
       
    } while (array[i] != 0); 

    mittelwert = summe / i;
    
    System.out.println("Maximum: " + max + ", Minimum: " + min 
          + ", Mittelwert: " + mittelwert); 

}
	}
}
```


----------



## Niki (2. Apr 2008)

du musst noch "i" in der Schleife hochzählen, sonst überschreibst du immer nur das erste Element

machs mal so

```
do {
       System.out.println("Bitte geben Sie eine Zahl ein (0 für Abbruch)");
       array[i] = s.nextInt();
       
     
          summe = summe + array[i];
          if (array[i] > max)
             max = array[i];
          if (array[i] < min)
             min = array[i];
                               
      
       i++;
    } while (array[i] != 0);
```


----------



## manu1588 (2. Apr 2008)

hm irgendwas stimmt noch immer nicht, er gibt zwar max und min richtig aus, aber den mittelwert berechnet er immer falsch:


```
import java.util.Scanner; 
public class maxminmittelwert { 
   public static void main(String[] args) { 
   // TODO Auto-generated method stub 

   int[] array = new int [300]; 

    Scanner s = new Scanner(System.in); 

    int max = 0; 
    int min = 0; 
    double mittelwert = 0; 
    double summe = 0; 
    double anzahl = 1;

    int i = 0; { 
    do { 
       System.out.println("Bitte geben Sie eine Zahl ein (0 für Abbruch)"); 
       array[i] = s.nextInt(); 
        
       for (Integer next : array) { 
          summe = summe + next; 
          anzahl = anzahl + 1;
          if (next > max) 
             max = next; 
          if (next < min) 
             min = next;                         
       } 
      
    } while (array[i] != 0); 
    i++; 
    mittelwert = summe / anzahl; 
    
    System.out.println("Maximum: " + max + ", Minimum: " + min 
          + ", Mittelwert: " + mittelwert); 

} 
   } 
}
```


----------



## Niki (2. Apr 2008)

i++ gehört *in* die schleife, draußen bringts dir gar nichts, die for-schleife brauchst du nicht, schau dir bitte nochmal meinen vorigen post an!


----------



## manu1588 (2. Apr 2008)

NEIN, denn dann bricht er jedes mal nach einer eingegebenen zahl ab und wenn ichs außerhalb habe funktioniert alles außer der blöde mittelwert !!!!!!!!!


----------



## manu1588 (2. Apr 2008)

jetzt ist es in der schleife und es geht noch immer nicht  :?  :bahnhof:  ???:L 


```
import java.util.Scanner; 
public class maxminmittelwert { 
   public static void main(String[] args) { 
   // TODO Auto-generated method stub 

   int[] array = new int [300]; 

    Scanner s = new Scanner(System.in); 

    int max = 0; 
    int min = 0; 
    double mittelwert = 0; 
    double summe = 0; 
    double anzahl = 1; 

    int i = 0; { 
    do { 
       System.out.println("Bitte geben Sie eine Zahl ein (0 für Abbruch)"); 
       array[i] = s.nextInt(); 
        
       for (Integer next : array) { 
          summe = summe + next; 
          anzahl = anzahl + 1; 
          if (next > max) 
             max = next; 
          if (next < min) 
             min = next;                          
          next++; 
       } 
       
    } while (array[i] != 0); 

    mittelwert = summe / anzahl; 
    
    System.out.println("Maximum: " + max + ", Minimum: " + min 
          + ", Mittelwert: " + mittelwert); 

} 
   }
```


----------



## Niki (2. Apr 2008)

der index deines arrays bleibt immer gleich --> du überschreibst immer das selbe wert mit der neuen zahl, außerdem wird deine summe bei jeder  neuen zahl komplett neu berechnet.

Das erste Beispiel von mir funktioniert, ob du es glaubst oder nicht.


----------



## Niki (2. Apr 2008)

So, das funkt. und diesmal ohne list...

```
import java.util.Scanner;

public class MinMaxMitte {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);

		int max = 0;
		int min = 0;
		double mittelwert = 0;
		double summe = 0;

		int i = 0;

		int next = 0;

		boolean first = true;
		do {
			System.out.println("Bitte geben Sie eine Zahl ein (0 für Abbruch)");

			next = s.nextInt();

			if (next != 0) {				
				summe = summe + next;

				if (next > max)
					max = next;
				if (first) {
					min = next;
					first = false;
				} else {
					if (next < min)
						min = next;
				}				
				i++;
			}

		} while (next != 0);

		mittelwert = summe / i;

		System.out.println("Maximum: " + max + ", Minimum: " + min
				+ ", Mittelwert: " + mittelwert);

	}
}
```


----------



## manu1588 (2. Apr 2008)

BITTE kannst du mir einfach mit meinem code ganz kurz helfen, dann wäre alles erledigt

DANKESCHÖN


----------



## Noar (2. Apr 2008)

Hi,

Versuch doch lieber Nikis Code zu verstehen, sein Beispiel funktioniert, und ist einfach aufgebaut.

Dein Minimum ist falsch (müsste immer 0 sein), weil du die letzte Eingabe (0)  mitrechnest. 
Dein Mittelwert ist falsch, weil deine for-Schleife nach jeder Eingabe 300 mal durchlaufen wird, und somit deine Variable Eingabe jedesmal um 300 hochgezählt wird.


----------



## manu1588 (2. Apr 2008)

habe mir jetzt den code von niki genauer angeschaut und da ich sehr unerfahren mit java bin verstehe ich sehr viele sachen nicht, genau deshalb hätte ich eben gerne, dass ihr mir nur ganz schnell menien fertig schreibt, denn ich denke nicht dass da so viel falsch ist


----------



## Niki (2. Apr 2008)

Es ist zu viel falsch in deinem Code dass man dein einfach ausbessern könnte....
Mein Code ist einfach zu verstehen:
Es wird eine Eingabe gemacht. Diese Eingabe wird der Variablen next zugeordnet. Wenn der Wert 0 ist wird abgebrochen.
Wenn es die erste Eingabe war (mit boolean variable first wird das überprüft) wird min zunächst einmal auf next gesetzt, wenn nicht, wird überprüft ob next kleiner min ist, wenn ja ist der neue min wert eben next.
Das gleiche Spielchen findet für max statt. Es wird überprüft ob next größer ist als der aktuelle max wert, wenn ja wird max der neue Wert zugewiesen. Gleichzeitig wird einfach ein Zähler hochgezählt (i) und der Wert zur Summe dazuaddiert.
Nach der Schleife wird einfach die Summe durch die Anzahl der eingegebenen Werte (i) dividiert um den Mittelwert zu berechnen.
Fazit:
Du brauchst kein Array weil alle Abfragen direkt nach der Eingabe erfolgen können und die Werte gleich gesetzt werden.


----------



## willi3 (26. Okt 2011)

Hallo!
Ich habe das selbe Problem.
Allerdings soll ich mein Programm mit einer do-while Schleife schreiben.

In der Zeile mit while schreibt eclipse folgende Fehlermeldung:
a cannot be resolved to a variable.

Ich finde leider keinen Fehler.
Kann mir bitte jemand weiterhelfen??


```
import java.util.Scanner;

public class Aufgabe7c {

		public static void main(String[] args) {
	
		System.out.println ("Geben Sie bitte ein paar ganze Zahlen ein.");
		System.out.println ("Das Programm wird beendet, sobald Sie 0 eingeben.");
		
		Scanner sc = new Scanner(System.in);
		int min=0, max=0, sum=0, anz=0;
						
		do {
			
			int a = sc.nextInt();
			if (a >0) {
				if (anz==1){min=a;} else  {
				min = Math.min(a, min); }
				max = Math.max(a, max);
				sum=sum+a;
				anz++;
			   }
			} while (a >0);
		
        int mit =sum/anz;
		
		System.out.println("Minimum = "+min+", Maximum = "+max+" Mittelwert = "+mit);
		}		

}
```


----------



## SlaterB (26. Okt 2011)

die Variable muss außerhalb der Schleife deklariert werden


----------



## Kirchhoff (26. Okt 2011)

Vielleicht "a" deklarieren.
Oben im code bei der "main-methode" [c]int a;[/c]


----------



## willi3 (26. Okt 2011)

Vielen Dank!!!


----------



## Gossi (26. Okt 2011)

Mehr an deinen Code halten kann man sich nicht, gut ist die Variante auch nicht, schau dir lieber den Code von Niki zu verstehen. Wenn du damit Probleme hast, dann wirst du beim Programmieren sicherlich niemals glücklich....


```
import java.util.Scanner;

public class MaxMinMittelwert {

	public static void main(final String[] args) {

		int[] array = new int[300];

		Scanner s = new Scanner(System.in);

		int max = Integer.MIN_VALUE; // -2147483648
		int min = Integer.MAX_VALUE; // 2147483647
		// MIN_VALUE und MAX_VALUE dienen dazu, dass wirklich alle werte erfasst
		// werden
		double mittelwert = 0;
		double summe = 0;
		double anzahl = 0;
		// Anzahl muss 0 sein, nicht 1

		// Durch die while-Schleife kannst du die eingaben direkt Pruefen
		int i = 0;
		int last = -1;
		while (last != 0) {
			System.out.println("Bitte geben Sie eine Zahl ein (0 für Abbruch)");
			last = s.nextInt();
			// Ganz wichtig: auf 0 pruefen
			if (last != 0) {
				array[i] = last;
				i++;
			}
		}

		// Wenn du hier erst das Array durchgehst bekommst du bei der Anzahl
		// auch keine falschen Werte mehr
		for (Integer next : array) {
			//Sobald ein Wert 0 ist, kann die Suche beendet werden
			if (next != 0) {
				summe = summe + next;
				anzahl = anzahl + 1;
				if (next > max) {
					max = next;
				}
				if (next < min) {
					min = next;
				}
			} else {
				break;
			}
		}

		//So, noch eben den Mittelwert berechnen
		mittelwert = summe / anzahl;

		//Und fertig
		System.out.println("Maximum: " + max + ", Minimum: " + min
				+ ", Mittelwert: " + mittelwert);
		
		/*
		 * Ausgabe:
		 * 
		 * Bitte geben Sie eine Zahl ein (0 für Abbruch)
		 * 4
		 * Bitte geben Sie eine Zahl ein (0 für Abbruch)
		 * 2
		 * Bitte geben Sie eine Zahl ein (0 für Abbruch)
		 * 0
		 * Maximum: 4, Minimum: 2, Mittelwert: 3.0
		 */

	}

}
```

PS:
Funktioniert so geschrieben sogar mit negativen Zahlen.


----------



## Jake?! (26. Okt 2011)

@Gossi: Der letzte Post von manu in diesem Thread ist 3 einhalb Jahre her, ich glaube er wird sich nicht mehr soo sehr für diese Klasse interessieren ;-)


----------



## Gossi (27. Okt 2011)

Jake?! hat gesagt.:


> @Gossi: Der letzte Post von manu in diesem Thread ist 3 einhalb Jahre her, ich glaube er wird sich nicht mehr soo sehr für diese Klasse interessieren ;-)



Verdammt, man sollte auch nach dem Datum schauen.


----------

