# For-Schleifen in ForEach umschreiben



## T-Pain (13. Nov 2012)

Hallo zusammen,

ich lerne grade Java und habe erst ein paar einfache Programme geschrieben.
Nun hänge ich an einer Teilaufgabe, in der wir die for Schleifen in eine foreach Schleife umwandeln sollen.

Ich bekomme das einfach nicht hin. Mein Programm läuft mit der for-Schleife, aber muss es noch mit der 
foreach Schleife hinbekommen.

Wie die foreach Schleife funktioniert, habe ich verstanden, aber die verschachtelten Schleifen bringen mich um...

Kann mir jemand bitte helfen?


```
import javax.swing.JOptionPane;


public class Uebung43 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
		
		// Aufgabenteil a und b
                // Maßstab wurde in km gewählt
		// Erzeugen eines mehrdimensionalen Arrays der Form:
		// Datentyp[][] Bezeichner = new Datentyp[n][m]
		// mit n, m Dimension der Tabelle/Matrix
		char[][] nordsee = new char[965][645];
		
		// Fuellen des Arrays mit Hilfe einer verschachtelten
		// for-Schleife. Wobei wir die Laenge bei zweidimensionalen
		// Arrays wie folgt erfahren koennen: 
		// nordsee.length = 965
		// nordsee[i].length = 645 gibt uns die Anzahl der Elemente
		// in der Zeile i wieder
		for(int i = 0; i < nordsee.length; i++){
			for(int j = 0; j < nordsee[i].length; j++){
				nordsee[i][j] = '~';
			}
		}
		
		// Aufgabenteil c
		// Beenden der Eingabe von Koordinaten mit der -1
		// Wenn die Eingabe korrekt ist, also >= 0 und nicht die Grenzen
		// des Arrays ueberschreitet < nordsee.length, dann fuegen wir
		// das Schiff durch das Zeichen * hinzu. Ansonsten wuerden wir
		// eine IndexOutOfBoundException erhalten.
		int x = 0;
		int y = 0;
		while(x != -1 && y != -1){		
			String xString = JOptionPane.showInputDialog("Geben Sie die x-Koordinate ein! (-1 zum Beenden)");
			String yString = JOptionPane.showInputDialog("Geben Sie die y-Koordinate ein! (-1 zum Beenden)");
			x = Integer.parseInt(xString);
			y = Integer.parseInt(yString);
			if(x >= 0 && y >= 0 && x < nordsee.length && y < nordsee[x].length){
				nordsee[x][y] = '*';
			} else if(x != -1 && y != -1){
				System.out.println("Ungueltige Eingabe!");
			}
		}
		
		                // Aufgabenteil d
				// Ausgabe der Karte mit einer verschachtelten for-Schleife
				for(int i = 0; i < nordsee.length; i++){
					for(int j = 0; j < nordsee[i].length; j++){
						System.out.print(nordsee[i][j]);
					}
					System.out.println();
				
		}
	}



	}
```


----------



## Camill (13. Nov 2012)

Aufgabenteil d könnte folgendermaßen aussehen:

```
for (char[] row : nordsee) {
			for (char c : row) {
				System.out.print(c);
			}
			System.out.println();
		}
```

Im Aufgabenteil b müsstest du dann noch zählvariablen deklarieren damit du weißt welcher Index zu befüllen ist.


----------



## T-Pain (13. Nov 2012)

also teil d steht bei mir jezt so:


```
// Aufgabenteil d
		// Ausgabe der Karte mit einer verschachtelten for-Schleife
		for(char[] i: nordsee){
			for(char j: i){
				System.out.print(j);
			}
			System.out.println();
```


ich bekomme das einfach nicht hin mit dem zweidimensionalem array, hab keine ahnung wie ich das in der foreach schleife verknüpfe.


----------



## pappawinni (14. Nov 2012)

Vielleicht hilft dir das Beispiel:


```
public class MainClass {
  public static void main(String args[]) {
    int sum = 0;
    int nums[][] = new int[3][5];

    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 5; j++)
        nums[i][j] = (i + 1) * (j + 1);

    for (int x[] : nums) {
      for (int y : x) {
        System.out.println("Value is: " + y);
        sum += y;
      }
    }
    System.out.println("Summation: " + sum);
  }
}
```

Use foreach(for each) style for on a two-dimensional array. : ForeachLanguage BasicsJava


----------



## T-Pain (14. Nov 2012)

jetzt, wo ich das beispiel sehe:

kann es sein, dass foreach nur beim lesenden zugriff funktiniert???
also dann jetzt praktisch nur bei der ausgabe.


----------



## pappawinni (14. Nov 2012)

Ja, es dürfte wohl so sein, dass foreach für schreibenden Zugriff nicht sehr praktisch ist.
So von hinten durch die Brust geht da schon was.

```
int sum = 0;
        int nums[][] = new int[3][5];
        int i = 0;
        
        for (int x[] : nums) {
            int j = 0;
            for (int y : x) {
                nums[i][j] = (i + 1) * (j + 1);
                j++;
            }
            i++;
        }
  
        for (int x[] : nums) {
          for (int y : x) {
            System.out.println("Value is: " + y);
            sum += y;
          }
        }
        System.out.println("Summation: " + sum);
```


----------



## T-Pain (14. Nov 2012)

danke bisher für die hilfe!

habe jetzt folgenden code:


```
import javax.swing.JOptionPane;


public class Uebung43 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// Aufgabe bearbeitet von Melek Gabriel
		
		// Aufgabenteil a und b
        // Maßstab wurde in km gewählt
		// Erzeugen eines mehrdimensionalen Arrays der Form:
		// Datentyp[][] Bezeichner = new Datentyp[n][m]
		// mit n, m Dimension der Tabelle/Matrix
		char[][] nordsee = new char[965][645];
		
		// Fuellen des Arrays mit Hilfe einer verschachtelten
		// for-Schleife. Wobei wir die Laenge bei zweidimensionalen
		// Arrays wie folgt erfahren koennen: 
		// nordsee.length = 965
		// nordsee[i].length = 645 gibt uns die Anzahl der Elemente
		// in der Zeile i wieder
		for(char[] x : nordsee){
			int j = 0;
			for(char y : x ){
				int i = 0;
				nordsee[i][j] = '~';
				j++;
				i++;
			}
			
		}
		
		// Aufgabenteil c
		// Beenden der Eingabe von Koordinaten mit der -1
		// Wenn die Eingabe korrekt ist, also >= 0 und nicht die Grenzen
		// des Arrays ueberschreitet < nordsee.length, dann fuegen wir
		// das Schiff durch das Zeichen * hinzu. Ansonsten wuerden wir
		// eine IndexOutOfBoundException erhalten.
		int x = 0;
		int y = 0;
		while(x != -1 && y != -1){		
			String xString = JOptionPane.showInputDialog("Geben Sie die x-Koordinate ein! (-1 zum Beenden)");
			String yString = JOptionPane.showInputDialog("Geben Sie die y-Koordinate ein! (-1 zum Beenden)");
			x = Integer.parseInt(xString);
			y = Integer.parseInt(yString);
			if(x >= 0 && y >= 0 && x < nordsee.length && y < nordsee[x].length){
				nordsee[x][y] = '*';
			} else if(x != -1 && y != -1){
				System.out.println("Ungueltige Eingabe!");
			}
		}
		
		// Aufgabe 3
		// Ausgabe der Karte mit einer verschachtelten foreach-Schleife
		for(char[] i: nordsee){
			for(char j: i){
				System.out.print(j);
			}
			System.out.println();
		}
	}



	}
```


das programm ist von der syntax her in ordnung, aber mein array wird jetzt nicht mehr mit dem char '~' gefüllt?!
wo liegt der fehler?


----------



## pappawinni (14. Nov 2012)

Du initialisierst bei jedem Durchlauf der Schleifen i und j neu, da kann ja nichts bei rauskommen.

So könnt es gehen:


```
int j = 0;
        for(char[] x : nordsee){
            int i = 0;
            for(char y : x ){
                nordsee[j][i] = '~';
                i++;
            }
            j++;
        }
```


----------



## T-Pain (14. Nov 2012)

jawoooohl danke!!! es funktioniert jetzt.


----------

