Verschachtelte Schleifen - Java; NetBeans

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)

PHP:
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;
		}
	}

}
 
Zurück