for schleife ohne klammer

rafikl97

Mitglied
Hey,
hab gesehen das for schleifen auch ohne eckige klammern funktionieren.. empfohlen wird aber mit, deswegen benutz ich sie.
jetzt bin ich etwas irritiert wieso mein code nicht funktioniert..

Java:
public class arrays {
    
    public static void main(String[] args) {
        
        double[] numbers = {1.9, 7.8, 2.4, 9.3};

        double sum = 0;
        

        for (int i = 0; i < numbers.length; i++) { //ohne klammer funktioniert der code
            sum += numbers[i];

            double avg = sum / numbers.length;
            

            }

        System.out.println(avg); //Fehlermeldung 

        }
}

das problem ist (vermute ich) das avg nur in der for schleife initialisiert wird, da will ichs aber nicht reinpacken weil ich nicht für jede zahl sondern insgesamt den durchschnitt möchte..
in der main methode gehts aber auch nicht :/ irgendjemand ein tipp ?

Gruß rafi
 
Wieso geht es in der main Methode nicht?

Du musst den Durchschnitt ja nur einmal berechnen und nicht bei jedem Durchlauf. D.h du musst in der Schleife deine Summe berechnen, was du ja bereits machst und erst danach den Durchschnitt.

PS: Ohne Klammer funktioniert er, weil nur die nächste Zeile nach der Schleife ausgewertet ist, es ist als das selbe, wenn du nur die "sum += ..." in Klammern setzt
 
was Du meinst, nennt sich "for-each"-Schleife!
for(int i : numbers) - nur das 'numbers' bei Dir eben KEIN Feld mit integer-Werten ist!!

VG Klaus
 
ok heißt ich muss es ausführlich machen..
wenn ich aber das ganze nur mit integer werten mache wird mir eine exceptation geworfen.. wie kommt es dazu?
das ist dann auch die letzte frage vielen dank 🙂
@VfL_Freak
 
Wenn du über double-Werte in einem double-Array mit einem "enhanced for statement" (umgangssprachlich auch "for-each loop" genannt) iterieren willst, dann musst du natürlich "for each double number in numbers", sprich `for (double number : numbers)` schreiben:
Java:
public static void main(String[] args) {
  double[] numbers = { 1.9, 7.8, 2.4, 9.3 };
  double sum = 0;
  for (double number : numbers)
    sum += number;
  double avg = sum / numbers.length;
  System.out.println(avg);
}
Deine Zählvariable in der enhanced for loop ist dann natürlich kein int mehr, da es sich dabei ja auch nicht mehr um einen Index handelt, sondern eben um einen konkreten Wert in dem Array.
 
erstmal danke für eure hilfe!
hab meinen fehler gefunden..

Java:
for (int i : numbers) {
            sum += i; // hab zuvor immer sum += numbers[i]

        }

das gleiche mit double funktioniert auch.. mich hatte irrirtiert das im buch "java ist auch eine insel" eben array statt wie bei mir i funktioniert (siehe kommentar)

Java:
public class Avg1 {

  static double avg( double[] array ) {
    double sum = 0;

    for ( int i = 0; i < array.length; i++ )
      sum += array[ i ]; // hier mit array[i] statt nur i

    return sum / array.length;
  }

  public static void main( String[] args ) {
    double[] numbers = new double[]{ 2, 3, 4 };
    System.out.println( avg( numbers ) );            // 3.0
  }
}
 
for (int i = 0; i < numbers.length; i++)
sum += numbers[i];
i ist hier ein Integer-Werte als Zählvariable der Schleife und kann gleichzeitig als Index für das Array 'numbers' genutzt werden.

'numbers' ist ein Feld mit ggf. vielen Werten des gleichen Datentyps.
Der Operator '[]' wird Index-Operator genannt.
Mit 'numbers' greifst Du also auf das i-te Element in dem Array zu!

Hier noch mal ein bisschen Hintergrund:
https://javabeginners.de/Arrays_und_Verwandtes/Array_deklarieren.php
http://www.java-programmieren.com/arrays-java.php

VG Klaus
 

Zurück
Oben