# Verschachtelte Schleifen - Java; NetBeans



## boring (12. Januar 2010)

Hi,

Ich brauche ganz dringend Hilfe bei den Aufgaben hier.. vielleicht könnte sich ja jemand erbarmen.. 

Das Problem ist, Ich brauche das bis spätestens heute Abend .. 
und am besten als vollständigen Quelltext. :s

http://i50.tinypic.com/i2kjfc.jpg

Bitteeeee


----------



## bingo88 (12. Januar 2010)

Zwar nicht alle Aufgaben und recht quick n dirty, hab aber leider nich mehr Zeit dafür! Habs auch nur kurz auf Fehler getestet, aber besser als nix ;o)


```
public class Wanderer {

	private static final char FELD_FREI = 'o';
	private static final char WANDERER_A = 'A';
	private static final char WANDERER_B = 'B';
	private static final char TREFFEN = 'T';

	private char feld[][] = null;
	private int n = 0;
	private Position posA = null;
	private Position posB = null;
	private boolean fertig = false;
	private boolean treffen = false;
	private int countA = 0;
	private int countB = 0;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Wanderer w = new Wanderer(4);

		System.out.println("Start:");
		// w.laufe();
		w.treffenTestLauf();
	}

	/**
	 * Erzeugt eine neue Instanz.
	 * 
	 * @param n
	 *            Matrixgröße.
	 */
	public Wanderer(int n) {
		if (n < 2) {
			throw new IllegalArgumentException("n < 2");
		}

		// Positionsdaten
		posA = new Position();
		posB = new Position();

		this.n = n;
		feld = new char[n][n];

		// Feld komplett als frei markieren
		for (int i = 0; i < feld.length; i++) {
			for (int j = 0; j < feld[i].length; j++) {
				feld[i][j] = FELD_FREI;
			}
		}

		resetAll();
	}

	/**
	 * Zeigt das Muster an.
	 */
	private void zeigeMuster() {
		for (int i = 0; i < feld.length; i++) {
			for (int j = 0; j < feld[i].length; j++) {
				System.out.print(feld[i][j] + " ");
			}

			System.out.println();
		}

		System.out.println();
	}

	/**
	 * Laesst die Wanderer wandern.
	 */
	public void laufe() {
		while (!fertig) {
			zeigeMuster();
			zug();
		}

		zeigeMuster();

		System.out.println("Wanderer A brauchte " + countA + " Schritte.");
		System.out.println("Wanderer B brauchte " + countB + " Schritte.");
	}

	/**
	 * Alles zuruecksetzen.
	 */
	private void resetAll() {
		// Alte Positionen freigeben
		feld[posA.y][posA.x] = FELD_FREI;
		feld[posB.y][posB.x] = FELD_FREI;

		// Startpunkt Wanderer A
		feld[n - 1][0] = WANDERER_A;
		posA.x = 0;
		posA.y = n - 1;

		// Startpunkt Wanderer B
		feld[0][n - 1] = WANDERER_B;
		posB.x = n - 1;
		posB.y = 0;

		treffen = false;
		fertig = false;
	}

	public void treffenTestLauf() {
		/*
		 * Das funktioniert irgendwie nicht richtig. Musste mal nachsehn...
		 */
		int treffZahl = 0;

		for (int i = 0; i < 1000000; i++) {
			resetAll();

			while (!fertig) {
				zug();
			}

			if (treffen) {
				treffZahl++;
			}
		}

		System.out.println("Die Wanderer haben sich " + treffZahl
				+ "-mal getroffen.");
	}

	/**
	 * Berechnet einen neuen Zug und führt ihn ggf. aus.
	 */
	private void zug() {
		// Zufallsvariable (pseudo...)
		double rnd = 0.0;

		if (posA.x < n - 1 && posA.y > 0) {
			// Zug Wanderer A
			rnd = Math.random();

			// Alte Position freigeben
			feld[posA.y][posA.x] = FELD_FREI;

			if (rnd < 0.5) {
				// nach rechts
				posA.x++;
			} else {
				// nach oben
				posA.y--;
			}

			// Schrittzähler Wanderer A erhöhen
			countA++;

			if (feld[posA.y][posA.x] != FELD_FREI) {
				// Wanderer haben sich getroffen.
				fertig = true;
				treffen = true;
				feld[posA.y][posA.x] = TREFFEN;
				return;
			} else {
				// Neue Position setzen
				feld[posA.y][posA.x] = WANDERER_A;
			}
		} else {
			fertig = true;
		}

		/*
		 * Dieser Teil kommt erst ab Aufgabe 4 zum Einsatz! Für die vorherigen
		 * Aufgaben, bitte den kompletten Block unter diesem Kommentar
		 * auskommentieren.
		 */
		if (posB.x > 0 && posB.y < n - 1) {
			// Zug Wanderer B
			rnd = Math.random();

			// Alte Position freigeben
			feld[posB.y][posB.x] = FELD_FREI;

			if (rnd < 0.5) {
				// nach links
				posB.x--;
			} else {
				// nach unten
				posB.y++;
			}

			// Schrittzähler Wanderer B erhöhen
			countB++;

			if (feld[posB.y][posB.x] != FELD_FREI) {
				// Wanderer haben sich getroffen.
				fertig = true;
				treffen = true;
				feld[posB.y][posB.x] = TREFFEN;
				return;
			} else {
				// Neue Position setzen
				feld[posB.y][posB.x] = WANDERER_B;
			}
		} else {
			fertig = true;
		}
	}

}
```


----------

