Mit Array eine summe, maximum und minimum berechnen?
Hier ist meine Lösung, aber warum wird mein Ergebnis bei der Ausgabe so oft überschrieben?
4 Antworten
int min, max;
...
min=neuesArray[0];
max=neuesArray[0];
for(int i=1;i<neuesArray.length;i++){
...
min=Math.min(min,neuesArray[i]);
max=Math.max(max,neuesArray[i]);
}
...
Nö. min ist eine Variable, Math.min() eine Methode in die du 2 Integer als Parameter übergibst um das kleinere Element davon zurückzubekommen (in dem Fall übergibst du die Variable min und das i-te Element deines Arrays in die Methode).
Du musst das nicht so machen. Du könntest auch eine eigene Methode implementieren.
Damit meine ich, dass du ja deinem min und max irgendeinen vernünftigen Wert zuweisen musst. Wenn du beispielsweise folgende Reihe hast
-1,-2,-3,-4
dann wäre -1 das größte Element. Da Integer aber mit 0 initialisiert werden, hätte max den Wert 0 und könnte den auch nicht verlieren (0 ist größer als jeder Wert im Array). Du würdest also ein falsches Ergebnis bekommen.
Ähnliches Beispiel für min:
1,2,3,4
Das kleinste Element wäre 1, wenn du aber min nicht setzt würde es 0 als kleinstes Element angeben, auch wenn es nicht im Array enthalten ist.
zunächst vielen Dank für die ausführliche Antwort!! :-)
"min ist eine Variable, Math.min() eine Methode in die du 2 Integer als Parameter übergibst um das kleinere Element davon zurückzubekommen (in dem Fall übergibst du die Variable min und das i-te Element deines Arrays in die Methode)."
- aber ich deklariere bevor ich die Methode nutze bereits min? Sprich min ist bereits ein intger zugewiesen? Oder nicht?
- Wieso funktioniert die Methode für min = neuesArray[0];, aber nicht für min = 10;? 10 Ist doch ebenfalls ein Intergerweret. Somit würde das Programm doch in der Methode 10 mit dem Array vergleichen?
Nochmals vielen Dank! Ich glaube mein Verständnis wird für dieses Thema ein bisschen klarer..
Für min=10 funktioniert es, wenn 10 im Array enthalten ist. Es ist aber sinnvoller direkt einen Wert aus dem Array zu ziehen, um die Wiederverwendbarkeit zu gewährleisten.
Dazu mal folgende Methode:
public static void outputMinMaxSumme(int[] arr){
int min, max, summe;
min=arr[0];
max=arr[0];
summe=arr[0];
for(int i=1;i<arr.length;i++){
summe+=arr[i];
min=Math.min(min,arr[i]);
max=Math.max(max,arr[i]);
}
System.out.println("Summe: " + summe + ", Min: " + min + ", Max: " + max);
}
Aufruf:
int[] testArr = {11,20,30,40,10};
int[] testArr2 = {11,20,30,40};
outputMinMaxSumme(testArr);
outputMinMaxSumme(testArr2);
Ergebnis:
Summe: 111, Min: 10, Max: 40
Summe: 101, Min: 11, Max: 40
Soweit so gut. Stellen wir mal nach, dass wir min und max mit 10 deklarieren:
public static void outputMinMaxSumme(int[] arr){
int min, max;
int summe=0;
min=10;
max=10;
for(int i=0;i<arr.length;i++){
summe+=arr[i];
min=Math.min(min,arr[i]);
max=Math.max(max,arr[i]);
}
System.out.println("Summe: " + summe + ", Min: " + min + ", Max: " + max);
}
Werte sind die gleichen wie vorher.
Ergebnis:
Summe: 111, Min: 10, Max: 40
Summe: 101, Min: 10, Max: 40
Wie man sieht ist das Ergebnis mit testArr (welches 10 beinhaltet) unverändert und richtig. Beim Durchlauf mit testArr2 (beinhaltet keine 10 und auch nur größere Werte) hat sich allerdings was verändert. Das Ergebnis ist verfälscht, da es keinen kleineren Wert als 10 gibt mit dem allerdings min deklariert wurde. Somit kann man die Methode lediglich verwende, wenn man sicherstellt, dass das zu überprüfende Array mindestens einen Wert hat der kleiner als 10 ist.
Am sinnvollsten ist es dabei mMn den ersten Wert zu nehmen, da man sich damit direkt eine Iteration sparen kann.
Somit würde das Programm doch in der Methode 10 mit dem Array vergleichen?
Soweit richtig, allerdings bringt dir das wenig, wenn du den kleinsten Wert des Arrays finden willst.
Danke! Aber eine Frage: Warum muss das min und max auch ein Array sein? Kann ich nicht einfach eine beliebige Zahl mit einem Array vergleichen?
Du rufst 2mal Math.min auf
Statt max=20,min=30 solltest du besser mit max=min=neuesArray[0] initialisieren und zwar nachdem neuesArray befüllt wurde.
mini und maxi brauchst du nicht, nur min und max
Jetzt sollte lesbar sein

ka probier mal
g.clearRect(0, 0, getWidth(), getHeight())
vor den drawSting dingern da
ah den Befehl kannte ich noch nicht! Jetzt sind die zahlen lesbar! Danke! Aber einen fehler gibt, bei min und max steht nur jeweils "8" für max stimmt es ja. Aber für min ist es Falsch
.....
