# Array mit for-each Schleife füllen



## KevCanon (2. Dez 2016)

Hallo Zusammen,

ich habe vor zwei Monaten mit dem Informatikstudium begonnen und wie so viele auch lerne ich Java. Bisher habe ich alle Probleme mit Hilfe von Scripten, Vorlesungsfolien, Google, YouTube, Kommilitonen, lösen können.
Jetzt stoße ich auf folgendes (scheinbar) unlösbare Problem.
Meine Aufgabe ist es, den Benutzer zu fragen, wieviele Werte er einlesen möchte. Anschließend kann er dann Werte eingeben und zuletzt werden die Werte dem Benutzer angezeigt.
Zunächst habe ich das Programm mit normalen for Schleife programmiert und dann versucht die for Schleifen in for-each Schleifen zu ändern. Bei der Ausgabe der Daten aus dem Array hat das auch funktioniert, aber nicht bei der Eingabe (In der Aufgabe steht explizit, dass man sowohl für die Eingabe als auch für die Ausgabe eine for-each Schleife verwenden soll).

Hier ist mein Code:

```
import java.util.Scanner;

public class Aufgabe27 {
   static Scanner in;
   public static void main(String[] args){
   in = new Scanner(System.in);
   System.out.println("Programm Array Ein- und Ausgabe");
   System.out.println("Wie viele Werte sollen eingelesen werden?");
   int anzahl = in.nextInt();
   int zahlen[] =new int[anzahl];
   
   for (int i=0;i<anzahl;i++) {
     System.out.print("Bitte geben Sie den " + (i+1) + ". Wert ein: ");
     zahlen[i] = in.nextInt();
   }

   System.out.print("Sie haben folgende Werte eingegeben: ");

   for (int element : zahlen) {
     System.out.print(element+", ");
   }
   }
}
```

Kann man überhaupt die for-each Schleife für eine Eingabe benutzen? Habe auch auf einer Internetseite gelesen, dass for-each nur lesend auf ein Array zugreifen kann.

Gruß
Kev


----------



## VfL_Freak (2. Dez 2016)

Moin,



KevCanon hat gesagt.:


> Kann man überhaupt die for-each Schleife für eine Eingabe benutzen?
> Habe auch auf einer Internetseite gelesen, dass for-each nur lesend auf ein Array zugreifen kann


Zunächst einmal ist ja eine for-each-Schleife nur eine verkürzte Schreibweise der 'normalen' for-Schleife, also funktional nichts anderes!
Zudem greifst Du doch auch nur lesend zu ... 

Ob es schreibend geht, kann ich so aus dem Stand auch nicht sagen, da ich es MHO noch nie versucht habe ...
Vielleicht findest hier näheres (habe nicht alles durchgelesen) 
https://www.google.de/search?q=for-each+schleife+java+erklärung&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&ei=vFBBWKfcL8KP8Qf2m4TwBA

Gruß Klaus


----------



## KevCanon (2. Dez 2016)

Hallo Klaus,

ich habe schon diverse Seiten durchgelesen und wenn for-each erklärt wurde, wurde immer nur aus einem Array ausgelesen, aber niemals Werte in ein Array gespeichert. Das wird entweder über eine Initialisierung oder eine for Schleife gemacht. Bleibt die Frage, ob man mit for-each in ein Array schreiben kann.

Gruß
Kevin


----------



## Joose (2. Dez 2016)

So wäre es möglich, aber unsinnig  bleibe lieber bei der normalen for-Schleife

```
int i = 0;
for (int element : zahlen) {
   System.out.print("Bitte geben Sie den " + (i+1) + ". Wert ein: ");
   zahlen[i] = in.nextInt();
   i++;
}
```
Hier wird der Zugriff auf den richtigen Index über eine extra Zählvariable realisiert. Die foreach-Schleife wird nur verwendet um eben das Array durchzugehen, nicht mehr und nicht weniger.


----------



## KevCanon (2. Dez 2016)

Ja, so funktioniert es!
Finde es aber auch sehr unsinnig so. Dann doch lieber direkt for Schleife verwenden.
Danke für die Antwort Joose!


----------



## Flown (2. Dez 2016)

@KevCanon die for-each Schleife bei Arrays sind nur syntactic sugar und wie @VfL_Freak schon gesagt hat eine kürzere Schreibweise.
Aus:

```
for(int i : ints) {
  // ...
}
```
wird:

```
for(int i = 0; i < ints.length; i++) {
   int var = ints[i];
   // ...
}
```


----------

