Mit Array eine summe, maximum und minimum berechnen?

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]);
}
...
Belus911 
Fragesteller
 17.06.2018, 01:08

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?

0
Etter  17.06.2018, 01:09
@Belus911

Sind es nicht. Es sind Integer. Die Zuweisung ist lediglich das setzen der Integer auf den ersten Wert des Integerarrays "neuesArray".

1
Belus911 
Fragesteller
 17.06.2018, 01:18
Also ich kann mit dem Befehl: 

min=Math.min(min,neuesArray[i]);

für "min" nicht einfach eine "interger Zahl" einfügen - sondern muss, über deinen beschrieben weg "gehen"?

aber kommt java nicht mit der deklaration wegen den beiden "min" im Befehl durcheinander?

Was meinst du damit?
"Die Zuweisung ist lediglich das setzen der Integer auf den ersten Wert des Integerarrays "neuesArray"
0
Etter  17.06.2018, 01:26
@Belus911

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.

1
Belus911 
Fragesteller
 17.06.2018, 01:59
@Etter

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..

0
Etter  17.06.2018, 02:14
@Belus911

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.

0

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

Bild zum Beitrag

Jetzt sollte lesbar sein

 - (Computer, Java, Netbeans)
Linguinignade  17.06.2018, 00:14

ka probier mal

g.clearRect(0, 0, getWidth(), getHeight())

vor den drawSting dingern da

1
Belus911 
Fragesteller
 17.06.2018, 00:23
@Linguinignade

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

0

.....

Bild zum Beitrag

 - (Computer, Java, Netbeans)
Belus911 
Fragesteller
 17.06.2018, 00:07

Sorry - hab den code neu hochgeladen

0