Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs/Übungsaufgaben/Abzaehlspiel/Musterloesung

Abzählspiel - Musterlösung

package abzaehlspiel;

public class Abzaehlspiel
{
	public static void main(String[] args)
	{
		int[] personen = new int[10000];// Array fuer die Personen
		int i;// Zaehlvariable

		// allen Personen eine Nummer zuweisen
		for (i = 0; i < 10000; i++)
		{
			// den Personen eine Nummer geben
			personen[i] = i + 1;
		}

		int stelle = 0;// Stelle der Person, welche man gerade betrachtet
		int zaehler = 0;// Variable, mit der man bis zum 3. zaehlt
		int letzter = -1;// Stelle, an der der Letzte ertfernt wurde

		// die eigentliche Abzaehlung
		do
		{
			// ueberpruefen ob die person noch da ist...
			if (personen[stelle] != 0)
			{
				// ... wenn ja, dann weiterzaehlen
				zaehler++;

				// ueberpruefen ob man beim 3. angekommen ist...
				if (zaehler == 3)
				{
					// ... diese Person etfernen (seine Numer auf Null setzen)
					personen[stelle] = 0;
					zaehler = 0;// wieder von vorne anfangen zu zaehlen
					letzter = stelle;// merken, wo als letztes entfernt wurde
				}// if
			}// if

			// zum naechsten gehen
			stelle++;

			// ueberpruefen ob man am Ende ist...
			if (stelle == personen.length)
			{
				// ... dann am Anfang fortsetzen
				stelle = 0;
			}

			// die Schleife so lange wiederholen, bis man an der Stelle
			// angekommen ist, an der man als Letztes jemanden entfernt hat,
			// dann ist man einmal duch alle Personen durchgelaufen
			// und hat dabei keinen entfernt => Ende
		} while (stelle != letzter);

		System.out.println("Uebrig bleiben:");

		// Alle Personen durchgehen...
		for (i = 0; i < 10000; i++)
		{
			// ... und wenn eine Person noch da ist...
			if (personen[i] != 0)
			{
				// ...ausgeben
				System.out.println(personen[i]);
			}
		}// for

	}// main
}// class












// Alternativlösung:

import java.util.ArrayList;

public class Abzaehlspiel {
	
	static int anzahl = 10000;
	static ArrayList<Integer> runde = new ArrayList<Integer>();;

	public static void main(String[] args) {
		rundeFuellen();
		teilnehmerEntfernen();
		gewinnerAusgeben();	
		}

	private static void rundeFuellen(){
		for (int i = 0 ; i < anzahl ; i++){
			runde.add(i);
		}
	}
		
	private static void teilnehmerEntfernen(){
		// 0, 1, 2 => der Teilnehmer mit Index 2 wird als erstes entfernt
		int raus = 2;
		
		while(runde.size()>2){	
			System.out.println("Entferne Teilnehmer "+ runde.get(raus));
			runde.remove(raus);
			raus = (raus + 2)% runde.size();
			}
		
	}
	private static void gewinnerAusgeben(){			
				System.out.println("Teilnehmer " + runde.toString() + " sind übrig");	
		
	}	

}