Wie rechne ich bei meinem Code, die Wahrscheinlichkeit von Fall X aus?

Fasko

Mitglied
Hallo,

wir haben den unten angegeben Code. Ich habe ein Dorf, jeder Dorfbewohner hat eine politische Einstellung. In meinem Code rot oder schwarz. Im Code wird ein zufälliger Dorfbewohner herausgesucht, dieser unterhält sich mit einem seiner NAchbarn (oben, unten, links oder rechts von ihm) und einer von beiden, bekehrt den anderen zu seiner politischen EInstellung.

Das Programm simuliert dies nun mit 40.000 Durchläufen. Jetzt möchte ich es noch so erweitern, dass ich bei jedem Schleifendurchlauf angezeigt bekomme, wie hoch die Wahrscheinlichkeit ist, ein Einparteiensystem/dorf zu erhalten.

Ich weiß nicht wie ich letzteres, also die Berechnung der Wahrscheinlichkeit im COde umsetzen soll.
Folgendes ist mein Code:

Java:
public class demokratur {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		//@Joël, wenn nicht anders erwähnt
		// .genZz(Länge der Zufallszahl) gibt eine Zufallszahl zurück
		// .resetArray(Array) Übergibt 2.DimArray Bewohner, erwartet Array mit 400 Feldern!!!
		
		//@toDos!:
		// ändere Methodennamen noch in deutsche Ableger! (bsp. get und set in hole und setze)
		// Fälle einbauen:
		// rand rechts: x+1 Verbot, rand links: x-1 Verbot; rand oben y+1 Verbot; rand unten y-1 Verbot
		// alles einzeln abfragen?
		// in fuehreGespraeche einabauen, oder vorher abfragen?
		// Idee: Werte für bestimmte Operationen mitgeben
		
	
		char[][] claEinwohner = new char[20][20];
		setUpBoxSecond cloBox = new setUpBoxSecond();
		int ilvZufallX=0;
		int ilvZufallY=0;
		int ilvXEins;
		int ilvXZwei;
		int ilvYEins;
		int ilvYZwei;
		int ilvGesamtschleifendurchlauf=0;
		
		// @param
		//Setzt das Array auf seine Startwerte
		claEinwohner = cloBox.resetArray(claEinwohner);
		
		
		for (int i=0; i<40000;i++){
		
			// such zwei Plätze aus
			// Dorfbewohner Nr.1
			ilvXEins=cloBox.genZz(19); // Höchster 19
			ilvYEins=cloBox.genZz(19); // Höchster 19
			
			
			// Übergabe an das Objekt
			//cloBox.setIlvParteiA(claEinwohner[ilvXEins][ilvYEins]); // Setzt Wert für spätere Berechnungen im Objekt
		
			
			// Führt das aktuelle Gespräch und bekehrt nach Regel
			//cloBox.waehleNachbar(ilvXEins, ilvYEins);
			cloBox.waehleNachbar(ilvXEins, ilvYEins);
			
			// Einer bekehrt jemanden
			
			ilvXZwei=cloBox.holeNachbarPosX();
			ilvYZwei=cloBox.holeNachbarPosY();
			// Kontrollausgabe, wenn gewünscht
			//System.out.println("Pos2X "+ilvXZwei);
			//System.out.println("Pos2Y "+ilvYZwei);
			
			//Übergabe von zwei Charwerten
			cloBox.fuehreGespraech(claEinwohner[ilvXEins][ilvYEins],claEinwohner[cloBox.holeNachbarPosX()][cloBox.holeNachbarPosY()]); // Führt Gespräch mit gewähltem Nachbar, Bekehrung
		
			// Hole Werte zurück
			claEinwohner[ilvXEins][ilvYEins]=cloBox.getIlvParteiA();
			claEinwohner[cloBox.holeNachbarPosX()][cloBox.holeNachbarPosY()]=cloBox.getIlvParteiB();
			// Kontrollausgabe, wenn gewünscht
			//cloBox.checkArray(claEinwohner);
			//System.out.println("Gesamtschleifendurchlauf "+i);
			ilvGesamtschleifendurchlauf=i;
		}// ende for
		System.out.println("Schleifendurchlauf: "+(ilvGesamtschleifendurchlauf+1));	
		System.out.println("Schwarz: "+cloBox.zaehleArrayEinfach(claEinwohner, 's'));
		System.out.println("Rot: "+cloBox.zaehleArrayEinfach(claEinwohner, 'r'));
		
		
		

	}

}
Java:
import java.util.*;
public class setUpBoxSecond {
	
	private char ilvParteiA;
	private char ilvParteiB;
	private char ilvParteiC;
	private int ilvXNachbar=0;
	private int ilvYNachbar=0;
	
	
	
	public int holeNachbarPosX(){
		return this.ilvXNachbar;
	}
	public int holeNachbarPosY(){
		return this.ilvYNachbar;
	}
	public char getIlvParteiA() {
		return ilvParteiA;
	}

	public void setIlvParteiA(char ilvParteiA) {
		this.ilvParteiA = ilvParteiA;
	}

	public char getIlvParteiB() {
		return ilvParteiB;
	}

	public void setIlvParteiB(char ilvParteiB) {
		this.ilvParteiB = ilvParteiB;
	}

	
	
	// Methoden!!!!
	/**
	 * führt das Gespräch
	 * bzw. hier wird bekehrt
	 * @param clvEinstellungPersonA 
	 * @param clvEinstellungPersonB
	 * @author Joël
	 */
	public void fuehreGespraech(char clvEinstellungPersonA, char clvEinstellungPersonB){
		
		
		int ilvZufallsZahl = genZz(2);
		char clvPuffer;
		
		switch(ilvZufallsZahl){
		
		case 0:
		clvPuffer = clvEinstellungPersonA;
		clvEinstellungPersonA = clvEinstellungPersonB;
		clvEinstellungPersonB=clvPuffer;
		//System.out.println("Testgespräch A");
		break;
		
		case 1:
		clvPuffer=clvEinstellungPersonB;
		clvEinstellungPersonB=clvEinstellungPersonA;
		clvEinstellungPersonA=clvPuffer;
		//System.out.println("Testgespräch B");
		break;
		
		default:
		System.out.println("ERROR in fuehreGespraeche");
		break;
		} // Ende Switch
		
		// Werte abspeichern
		this.ilvParteiA=clvEinstellungPersonA;
		this.ilvParteiB=clvEinstellungPersonB;
		
		
	}
	
	/**
	 * Einer der Nachbarn wird ausgewählt
	 * anschließend muss dieser noch bekehrt werden
	 * hierfür schreibe ich eine extra Methode
	 * Die Daten des gewählten Nachbarn werden in die lokalen Variablen der Klasse geschrieben
	 * @author Joël
	 * @param ilvX Position des Dorfbewohners auf der x-Achse
	 * @param ilvY Position des Dorfbewohners auf der y-Achse
	 * 
	 */
public void waehleNachbar(int ilvX, int ilvY){
	
	int ilvZufallsZahl = genZz(4);
		
	// Randfälle abfangen:
	// aus links mach rechts
	if (ilvX ==0 && ilvZufallsZahl ==3){
		ilvZufallsZahl=2;
		System.out.println("aus links mach rechts");
	}
	// aus rechts mach links
	else if(ilvX==19&&ilvZufallsZahl==2){
		ilvZufallsZahl=3;
		System.out.println("aus rechts mach links");
	}
	
	// Wenn Keine Änderungen nötig sind, wird einfach das übergebene intern eingespeichert
	switch(ilvZufallsZahl){
	case 2:
		// rechts
		this.ilvXNachbar=ilvX+1;
		break;
	case 3:
		// links
		this.ilvXNachbar=ilvX-1;
		break;
	default:
		this.ilvXNachbar=ilvX;
		break;
	} // rechts und links Switch
	
	//Randfälle abfangen
	// aus oben mach unten
	if (ilvY ==0 && ilvZufallsZahl ==1){
		ilvZufallsZahl=0;
		System.out.println("aus oben mach unten");
	}
	// aus unten mach oben
	else if(ilvY==19&&ilvZufallsZahl==1){
		ilvZufallsZahl=0;
		System.out.println("aus unten mach oben");
	}
	
	// Wenn Keine Änderungen nötig sind, wird  das übergebene intern eingespeichert
	switch (ilvZufallsZahl){
	case 0: 
		// oben
		this.ilvYNachbar=ilvY+1;
		
		break;
	case 1:
		// unten
		this.ilvYNachbar=ilvY-1;
		
		break;
	
	default:
		this.ilvYNachbar=ilvY;
		break;
				
	}// oben und unten Switch
	

} // Ende Metode

/**
 * @deprecated
 * @param ilvPosX
 * @param ilvPosY
 */
public void auswaehlenNachbar(int ilvX, int ilvY){
	// HIER IST IRGENDWO EIN FEHLER
		//TODO: Fehler bei den Randabfragen!

		int ilvZufallsZahl = genZz(4);
			
		
		
		// Wenn Keine Änderungen nötig sind, wird einfach das übergebene intern eingespeichert
		switch(ilvZufallsZahl){
		case 2:
			// rechts
			this.ilvXNachbar=ilvX+1;
			break;
		case 3:
			// links
			this.ilvXNachbar=ilvX-1;
			break;
		default:
			this.ilvXNachbar=ilvX;
			break;
		} // rechts und links Switch
		
		
		// Wenn Keine Änderungen nötig sind, wird  das übergebene intern eingespeichert
		switch (ilvZufallsZahl){
		case 0: 
			// oben
			this.ilvYNachbar=ilvY+1;
			
			break;
		case 1:
			// unten
			this.ilvYNachbar=ilvY-1;
			
			break;
		
		default:
			this.ilvYNachbar=ilvY;
			break;
					
		}// oben und unten Switch

	
}

	/**
	 * Nothing
	 * Entscheidet wer wen bekehrt
	 * @deprecated
	 * @author Joël
	 */
public void bekehrung(){
			
}
 /**
  *@author Joël
  * @param laenge Übergibt die Grenze, für die zufällig erstellten Zahlen 
  * @return Zufallszahl
  */
public int genZz(int laenge){ 
		
		Random iloZahlenMaschine = new Random();
		int ilvZahl = iloZahlenMaschine.nextInt(laenge); // Mind. 0 Max laenge (Array beginnt bei 0 an zu zählen)
		
		// Überprüfungscode:
		// System.out.println("LÄNGE: " + laenge);
		// System.out.println("Meine Zufallszahl: "+zahl);
		
		return ilvZahl; // übergibt zufällig generierte Zahl
	}

/**
 * Setzt das gesamte Array auf die Startwerte zurück
 * Im einfachen Fall: Eine zufällige Mischung aus schwarz und rot
 * @author Joël
 * @param ar
 * @return Gibt das Array mit den neuen Werten zurück
 */
public char[][] resetArray(char[][]ar){ //@param: setzt Array auf Startwerte zurück; noch nicht fertig!
	
	for (int y=0; y<20;y++){
		
	
		for(int x=0;x<20;x++){
			
			ar[y][x]=zufaelligeGesinnungEinfach();
			
		}// Ende for-Schleife x
	
	
	}// Ende for-Schleife y
	return ar;
	
}



/**
 * Das Array wird mit den politischen Einstellungen befüllt
 * Einfach: schwart oder rot
 * @author Joël
 * @return gibt das Array mit neuen Werten zurück
 */
	
public char zufaelligeGesinnungEinfach(){ //@param: gibt zufällige Gesinnung zurück, schwarz oder rot
	
	int ilvWelchePartei=genZz(2);
	char clvRueckgabe ='?';
	
	switch(ilvWelchePartei){
	
	case 0:
		clvRueckgabe='s';
		break;
	case 1:
		clvRueckgabe='r';
		break;
	default:
		System.out.println("ERROR in zuefaelligeGesinnungEinfach!");
		
	}//Ende-switch
	
	//Testcode
	//System.out.println(ilvWelchePartei);
	//System.out.println(clvRueckgabe);
	
	//@param
	//soll s oder r zurück geben
	return clvRueckgabe;
}
/**
 * Das Array wird mit den politischen Einstellungen befüllt
 * Komplex: schwarz, rot, grün, gelb
 * @author Joël
 * @return gibt das Array mit neuen Werten zurück
 */
public char zufaelligeGesinnungKomplex(){ //@param: gibt zufällige Gesinnung zurück, schwarz oder rot
	
	int ilvWelchePartei=genZz(2);
	char clvRueckgabe ='?';
	
	switch(ilvWelchePartei){
	
	case 0:
		clvRueckgabe='s';
		break;
	case 1:
		clvRueckgabe='r';
		break;
	default:
		System.out.println("ERROR in zuefaelligeGesinnungEinfach!");
		
	}//Ende-switch
	
	//Testcode
	//System.out.println(ilvWelchePartei);
	//System.out.println(clvRueckgabe);
	
	//@param
	//soll s oder r zurück geben
	return clvRueckgabe;
}
/**
 * Gibt den kompletten Inhalt des Arrays in der Console aus
 * @author Joël
 * @param ar
 */

public void checkArray(char[][] ar){ 
	int ilvDurchlaufzahl=0;
	for (int y=0; y<20;y++){
		
		
		for(int x=0;x<20;x++){
			ilvDurchlaufzahl++;
			System.out.println(ilvDurchlaufzahl+"<>"+ar[y][x]);
			
		}// Ende for-Schleife x
	
	
	}// Ende for-Schleife y
	
}
/**
 * Zählt den gesuchten Wert im Array
 * @param ar übergebenes Array
 * @param clvSuche
 * @return gibt die ermittelte Anzahl durch
 */
public int zaehleArrayEinfach(char[][] ar, char clvSuche){
	int count=0;
	for (int y=0; y<20;y++){
		
		for (int x=0; x<20;x++){
			if(ar[x][y]==clvSuche){
				count ++;
			}
		}
		
		
	}
	
	return count;
}


}

Ausgabe:
(...)
Schleifendurchlauf: 40000
Schwarz: 217
Rot: 183

Wobei (...) für die Wahrscheinlichkeitsrechnungen stehen soll.
Ich bin für jede Hilfe dankbar!

Gruß

Fasko

PS: Später will ich das Programm noch so erweitern, dass ich mit mehr als nur zwei Parteien starte.
 
Naja, ohne jetzt durch deinen Code zu rattern, würde ich erstmal den aktuellen Stand der jeweiligen Partei ermitteln.
Einparteiensystem heisst ja entweder Rot oder Schwartz.
Wie wird denn der Nachbar überzeugt? Gelingt das immer? Werden nur Nachbarn Überzeugt (also geziehlt), die einer anderen Partei angehören(sofern so ein Nachbar existiert)?
Es sind also genaue Spielregeln erforderlich um eine Wahrscheinlichkeit zu ermitteln, welche in ihrem Wert mit abnehmenden verbleibenden Durchläufen zunimmt.

Gruß Vanny

//EDIT: ok ist also absoluter Zufall, ob bekehrt wird und klappt auch immer ^^
Aufjeden Fall musst du die verbleibende Anzahl der Durchläufe berücksichtigen.
 
Zuletzt bearbeitet von einem Moderator:
Ok genauer:
Wir haben ein Dorf mit 400 Einwohnern. Jeder hat eine politische Einstellung (schwarz, rot, gelb oder grün).
Im Programm wird ein zufälliger Bürger ausgesucht. Dann wird einer seiner Nachbarn ausgesucht (oben, unten, links oder rechts). Wenn die politische Einstellung beider unterschiedlich ist, wird zufällig entschieden, wer wen überzeugt.
Wie hoch ist jetzt die Wahrscheinlichkeit, dass es zu einem Einpareiensystem kommt.

Startwete:
40% Schwarz
40% Rot
15% Grün
5% Gelb

Schleifendurchläufe 50.000

Im besten Fall bekomme ich das später so hin, dass bei jedem Schleifendurchlauf die Wahrscheinlichkeit neuberechnet wird. Was bedeuten würde, dass ganze in der Schleife zu berechnen und dann entsprechend das Array dafür immer neu durchzuzählen.
Bei mir fängt das Problem schon auf dem Blatt Papier an. :rtfm:😳

Der erste Post ist fehlerhaft, fertiger Code (mit Ausnahme der Wahrscheinlichkeitsberechnung):


Hauptklasse:
Java:
public class demokratur {
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		//@Name, wenn nicht anders erwähnt
		// .genZz(Länge der Zufallszahl) gibt eine Zufallszahl zurück
		// .resetzeArray(Array) Übergibt 2.DimArray Bewohner, erwartet Array mit 400 Feldern!!!
		
		//@toDos!:
		// ändere Methodennamen noch in deutsche Ableger! (bsp. hole und setze in hole und setzeze)
		// Fälle einbauen:
		// rand rechts: x+1 Verbot, rand links: x-1 Verbot; rand oben y+1 Verbot; rand unten y-1 Verbot
		// alles einzeln abfragen?
		// in fuehreGespraeche einabauen, oder vorher abfragen?
		// Idee: Werte für bestimmte Operationen mitgeben
		
	
		char[][] claEinwohner = new char[20][20];
		setUpBoxSecond cloBox = new setUpBoxSecond();
		int ilvZufallX=0;
		int ilvZufallY=0;
		int ilvXEins;
		int ilvXZwei;
		int ilvYEins;
		int ilvYZwei;
		int ilvGesamtschleifendurchlauf=0;
		double ilvWahrscheinlichkeitsberechnung;
		
		// @param
		//setzezt das Array auf seine Startwerte
		claEinwohner = cloBox.setzeArrayZurück(claEinwohner);
		
				System.out.println("Start: ");
				System.out.println("Schleifendurchlauf: "+(ilvGesamtschleifendurchlauf+1));	
				System.out.println("Schwarz: "+cloBox.zaehleArray(claEinwohner, 's'));
				System.out.println("Rot: "+cloBox.zaehleArray(claEinwohner, 'r'));
				System.out.println("Grün: "+cloBox.zaehleArray(claEinwohner, 'g'));
				System.out.println("Gelb: "+cloBox.zaehleArray(claEinwohner, 'y'));
				//cloBox.checkArray(claEinwohner);
				
		for (int i=0; i<40000;i++){
		
			// such zwei Plätze aus
			// Dorfbewohner Nr.1
			ilvXEins=cloBox.genZz(19); // Höchster 19
			ilvYEins=cloBox.genZz(19); // Höchster 19
			
			
			// Übergabe an das Objekt
			//cloBox.setzeIlvParteiA(claEinwohner[ilvXEins][ilvYEins]); // setzezt Wert für spätere Berechnungen im Objekt
		
			
			
			//Wähle einen zufälligen Nachbarn heraus (oben, unten, links oder rechts)
			cloBox.waehleNachbar(ilvXEins, ilvYEins);
			
			// Holt die Werte Positionsdaten des zuvor rausgesuchten Nachbars
			ilvXZwei=cloBox.holeNachbarPosX();
			ilvYZwei=cloBox.holeNachbarPosY();
			
			// Kontrollausgabe, wenn gewünscht
			/*System.out.println("Vorher");
			System.out.println("Auserwählter: "+claEinwohner[ilvXEins][ilvYEins]);
			System.out.println("Auserwählter X: "+ilvXEins);
			System.out.println("Auserwählter Y: "+ilvYEins);
			System.out.println("Nachbar: " + claEinwohner[ilvXZwei][ilvYZwei]);
			System.out.println("NachbarPos X: "+ilvXZwei);
			System.out.println("NachbarPos Y: "+ilvYZwei);*/
			
			//Übergabe von zwei Charwerten
			cloBox.fuehreGespraech(claEinwohner[ilvXEins][ilvYEins],claEinwohner[cloBox.holeNachbarPosX()][cloBox.holeNachbarPosY()]); // Führt Gespräch mit gewähltem Nachbar, Bekehrung
		
			// Hole die neuen Werte
			claEinwohner[ilvXEins][ilvYEins]=cloBox.holeParteiA();
			claEinwohner[cloBox.holeNachbarPosX()][cloBox.holeNachbarPosY()]=cloBox.holeParteiB();
			// Kontrollausgabe, wenn gewünscht
			//cloBox.checkArray(claEinwohner);
			//System.out.println("Gesamtschleifendurchlauf "+i);
			ilvGesamtschleifendurchlauf=i;
		
			// Wahrscheinlichkeitsbrechnung
			ilvWahrscheinlichkeitsberechnung= (double)i;
			// System.out.println(ilvWahrscheinlichkeitsberechnung);
			// Kontrollausgabe, wenn gewünscht
		/*	System.out.println("Nachher");
			System.out.println("Auserwählter: "+claEinwohner[ilvXEins][ilvYEins]);
			System.out.println("Auserwählter X: "+ilvXEins);
			System.out.println("Auserwählter Y: "+ilvYEins);
			System.out.println("Nachbar: " + claEinwohner[ilvXZwei][ilvYZwei]);
			System.out.println("NachbarPos X: "+ilvXZwei);
			System.out.println("NachbarPos Y: "+ilvYZwei);
			System.out.println("++++++++++++++++++++++++++++++++++++");*/
			
		}// ende for
		
		
		
		
		
		System.out.println("Ende: ");
		System.out.println("Schleifendurchlauf: "+(ilvGesamtschleifendurchlauf+1));	
		System.out.println("Schwarz: "+cloBox.zaehleArray(claEinwohner, 's'));
		System.out.println("Rot: "+cloBox.zaehleArray(claEinwohner, 'r'));
		System.out.println("Grün: "+cloBox.zaehleArray(claEinwohner, 'g'));
		System.out.println("Gelb: "+cloBox.zaehleArray(claEinwohner, 'y'));
		
		System.out.println("Gesamtanzahl der Mitarbeiter: "+ claEinwohner.length*claEinwohner.length);
	 System.out.println("% Wahrscheinlichkeit "+(1/ilvGesamtschleifendurchlauf));
		
		
		

	}

}

Klasse
Java:
import java.util.*;
public class setUpBoxSecond {
	
	private char ilvParteiA;
	private char ilvParteiB;
	private char ilvParteiC;
	private int ilvXNachbar=0;
	private int ilvYNachbar=0;
	private int ilvStartSchwarz=41;
	private int ilvStartRot=41;
	private int ilvStartGruen=11;
	private int ilvStartGelb=7;
	
	
	
	public int holeNachbarPosX(){
		return this.ilvXNachbar;
	}
	public int holeNachbarPosY(){
		return this.ilvYNachbar;
	}
	public char holeParteiA() {
		return ilvParteiA;
	}

	public void setzeParteiA(char ilvParteiA) {
		this.ilvParteiA = ilvParteiA;
	}

	public char holeParteiB() {
		return ilvParteiB;
	}

	public void setzeParteiB(char ilvParteiB) {
		this.ilvParteiB = ilvParteiB;
	}

	
	
	// Methoden!!!!
	/**
	 * führt das Gespräch
	 * Es wird zufällig entschieden welche Person wen "bekehrt".
	 * @param clvEinstellungPersonA 
	 * @param clvEinstellungPersonB
	 * @author Name
	 */
	public void fuehreGespraech(char clvEinstellungPersonA, char clvEinstellungPersonB){
		
		
		int ilvZufallsZahl = genZz(2);
		char clvPuffer;
		
		switch(ilvZufallsZahl){
		
		case 0:
		clvEinstellungPersonA = clvEinstellungPersonB;
	
	//	System.out.println("Testgespräch A"+clvEinstellungPersonA);
		break;
		
		case 1:
		clvEinstellungPersonB=clvEinstellungPersonA;
		
	//	System.out.println("Testgespräch B"+clvEinstellungPersonB);
		break;
		
		default:
		System.out.println("ERROR in fuehreGespraeche");
		break;
		} // Ende Switch
		
		// Werte abspeichern
		this.ilvParteiA=clvEinstellungPersonA;
		this.ilvParteiB=clvEinstellungPersonB;
		
		
	}
	
	/**
	 * Generiert eine Zufallszahl 
	 * @author Name
	 * @param ilvX Position des Dorfbewohners auf der x-Achse
	 * @param ilvY Position des Dorfbewohners auf der y-Achse
	 * 
	 */
public void waehleNachbar(int ilvX, int ilvY){
	
	int ilvZufallsZahl = genZz(4);
		
	// Randfälle abfangen:
	// aus links mach rechts
	if (ilvX ==0 && ilvZufallsZahl ==3){
		ilvZufallsZahl=2;
		//System.out.println("aus links mach rechts");
	}
	// aus rechts mach links
	else if(ilvX==19&&ilvZufallsZahl==2){
		ilvZufallsZahl=3;
		//System.out.println("aus rechts mach links");
	}
	
	// Wenn Keine Änderungen nötig sind, wird einfach das übergebene intern eingespeichert
	switch(ilvZufallsZahl){
	case 2:
		// rechts
		this.ilvXNachbar=ilvX+1;
		break;
	case 3:
		// links
		this.ilvXNachbar=ilvX-1;
		break;
	default:
		this.ilvXNachbar=ilvX;
		break;
	} // rechts und links Switch
	
	//Randfälle abfangen
	// aus oben mach unten
	if (ilvY ==0 && ilvZufallsZahl ==1){
		ilvZufallsZahl=0;
		//System.out.println("aus oben mach unten");
	}
	// aus unten mach oben
	else if(ilvY==19&&ilvZufallsZahl==1){
		ilvZufallsZahl=0;
		//System.out.println("aus unten mach oben");
	}
	
	// Wenn Keine Änderungen nötig sind, wird  das übergebene intern eingespeichert
	switch (ilvZufallsZahl){
	case 0: 
		// oben
		this.ilvYNachbar=ilvY+1;
		
		break;
	case 1:
		// unten
		this.ilvYNachbar=ilvY-1;
		
		break;
	
	default:
		this.ilvYNachbar=ilvY;
		break;
				
	}// oben und unten Switch
	

} // Ende Metode

/**
 * @deprecated
 * @param ilvPosX
 * @param ilvPosY
 */
public void auswaehlenNachbar(int ilvX, int ilvY){
	// HIER IST IRGENDWO EIN FEHLER
		//TODO: Fehler bei den Randabfragen!

		int ilvZufallsZahl = genZz(4);
			
		
		
		// Wenn Keine Änderungen nötig sind, wird einfach das übergebene intern eingespeichert
		switch(ilvZufallsZahl){
		case 2:
			// rechts
			this.ilvXNachbar=ilvX+1;
			break;
		case 3:
			// links
			this.ilvXNachbar=ilvX-1;
			break;
		default:
			this.ilvXNachbar=ilvX;
			break;
		} // rechts und links Switch
		
		
		// Wenn Keine Änderungen nötig sind, wird  das übergebene intern eingespeichert
		switch (ilvZufallsZahl){
		case 0: 
			// oben
			this.ilvYNachbar=ilvY+1;
			
			break;
		case 1:
			// unten
			this.ilvYNachbar=ilvY-1;
			
			break;
		
		default:
			this.ilvYNachbar=ilvY;
			break;
					
		}// oben und unten Switch

	
}


 /**
  *@author Name
  * @param laenge Übergibt die Grenze, für die zufällig erstellten Zahlen 
  * @return Zufallszahl
  */
public int genZz(int laenge){ 
		
		Random iloZahlenMaschine = new Random();
		int ilvZahl = iloZahlenMaschine.nextInt(laenge); // Mind. 0 Max laenge (Array beginnt bei 0 an zu zählen)
		
		// Überprüfungscode:
		// System.out.println("LÄNGE: " + laenge);
		// System.out.println("Meine Zufallszahl: "+zahl);
		
		return ilvZahl; // übergibt zufällig generierte Zahl
	}

/**
 * setzt das gesamte Array auf die Startwerte zurück
 * Die Werte werden aus der Methode zufaelligeGesinnungEinfach geholt
 * @author Name
 * @param ar
 * @return Gibt das Array mit den neuen Werten zurück
 */
public char[][] setzeArrayZurück(char[][]ar){ //@param: setzezt Array auf Startwerte zurück; noch nicht fertig!
	
	ar = setzeArrayZurückAufFragezeichen(ar);
	
	int ilvArrayKapazitaet=(ar.length*ar.length);
	for (int y=0; y<20;y++){
		
	
		for(int x=0;x<20;x++){
			
			ar[y][x]=zufaelligeGesinnungKomplex(ar, ar.length*ar.length, ilvStartSchwarz, ilvStartRot, ilvStartGelb, ilvStartGruen);
			
		}// Ende for-Schleife x
	
	
	}// Ende for-Schleife y
	return ar;
	
}

/**
 * Füllt das Array mit '?' 
 * @author Name
 * @param ar
 * @return Gibt das Array mit den neuen Werten zurück
 */
private char[][] setzeArrayZurückAufFragezeichen(char[][]ar){ //@param: setzezt Array auf Startwerte zurück; noch nicht fertig!
	
	int ilvArrayKapazitaet=(ar.length*ar.length);
	for (int y=0; y<20;y++){
		
	
		for(int x=0;x<20;x++){
			
			ar[y][x]='?';
			
		}// Ende for-Schleife x
	
	
	}// Ende for-Schleife y
	return ar;
	
}

/**
 * Das Array wird mit den politischen Einstellungen befüllt
 * Einfach: schwartz oder rot
 * @author Name
 * @return gibt das Array mit neuen Werten zurück
 */
	
public char zufaelligeGesinnungEinfach(){ //@param: gibt zufällige Gesinnung zurück, schwarz oder rot
	
	int ilvWelchePartei=genZz(4);
	char clvRueckgabe ='?';
	
	switch(ilvWelchePartei){
	
	case 0:
		clvRueckgabe='s';
		break;
	case 1:
		clvRueckgabe='r';
		break;
	case 2:
		clvRueckgabe='g'; //grün
		break;
	case 3:
		clvRueckgabe='y'; // Yellow / Gelb
		break;
	default:
		
		System.out.println("ERROR in zuefaelligeGesinnungEinfach! int ilVWelchepartei = "+ilvWelchePartei);
		
	}//Ende-switch
	
	//Testcode
	//System.out.println(ilvWelchePartei);
	//System.out.println(clvRueckgabe);
	
	//@param
	//soll s oder r zurück geben
	return clvRueckgabe;
}
/**
 * Das Array wird mit den politischen Einstellungen befüllt
 * Komplex: s)chwarz, r)ot, g)rün, y)elb
 * @author Name
 * @param ilvProzentSchwarz/Rot/Gelb/Grün erwartet in Prozent
 * @return gibt das Array mit neuen Werten zurück
 */
public char zufaelligeGesinnungKomplex(char[][] alv, int ilvGrundwert, int ilvProzentSchwarz, int ilvProzentRot, int ilvProzentGelb, int ilvProzentGruen  ){ //@param: gibt zufällige Gesinnung zurück, schwarz oder rot
	
	// Prozent in Zahl
	int ilvAnzahlSchwarz = (ilvGrundwert*ilvProzentSchwarz)/100;
	int ilvAnzahlRot = (ilvGrundwert*ilvProzentRot)/100;
	int ilvAnzahlGelb = (ilvGrundwert*ilvProzentGelb)/100;
	int ilvAnzahlGruen = (ilvGrundwert*ilvProzentGruen)/100;
	
	int ilvWelchePartei=genZz(4);
	char clvRueckgabe ='?';
	
	switch(ilvWelchePartei){
	
	case 0:
		if(zaehleArray(alv, 's')<=ilvAnzahlSchwarz){
			//System.out.println("Schwarz");
			clvRueckgabe='s';
			break;
		}
		
	case 1:
		if(zaehleArray(alv,'r')<=ilvAnzahlRot){
			//System.out.println("Rot");
		clvRueckgabe='r';
		break;
		}
	case 2:
		if (zaehleArray(alv, 'g')<=ilvAnzahlGruen){
			//System.out.println("Grün");
		clvRueckgabe='g';
		break;
		}
	case 3:
		if(zaehleArray(alv, 'y')<=ilvAnzahlGelb){
			//System.out.println("Gelb");
		clvRueckgabe='y';
		break;
		}
	default:
		clvRueckgabe=zufaelligeGesinnungKomplex( alv,  ilvGrundwert,  ilvProzentSchwarz,  ilvProzentRot,  ilvProzentGelb,  ilvProzentGruen);
	//	System.out.println("ERROR in zuefaelligeGesinnungKomplex! int ilVWelchepartei = "+ilvWelchePartei);
	//	System.out.println("Schwarz "+zaehleArray(alv,'s')+"Rot "+zaehleArray(alv,'r')+"Grün "+zaehleArray(alv,'g')+"Gelb " +zaehleArray(alv,'y'));
	
		
	}//Ende-switch
	
	//Testcode
	//System.out.println(ilvWelchePartei);
	//System.out.println(clvRueckgabe);
	
	//@param
	//soll s oder r zurück geben
	return clvRueckgabe;
}
/**
 * Gibt den kompletten Inhalt des Arrays in der Console aus
 * @author Name
 * @param ar
 */

public void checkArray(char[][] ar){ 
	int ilvDurchlaufzahl=0;
	for (int y=0; y<20;y++){
		
		
		for(int x=0;x<20;x++){
			ilvDurchlaufzahl++;
			System.out.println(ilvDurchlaufzahl+"<>"+ar[y][x]);
			
		}// Ende for-Schleife x
	
	
	}// Ende for-Schleife y
	
}
/**
 * Zählt den gesuchten Wert im Array
 * @param ar übergebenes Array
 * @param clvSuche
 * @return gibt die ermittelte Anzahl durch
 */
public int zaehleArray(char[][] ar, char clvSuche){
	int count=0;
	for (int y=0; y<20;y++){
		
		for (int x=0; x<20;x++){
			if(ar[x][y]==clvSuche){
				count ++;
			}
		}
		
		
	}
	
	return count;
}



}


Ausgabe:
Start:
Schleifendurchlauf: 1
Schwarz: 161
Rot: 165
Grün: 45
Gelb: 29
Ende:
Schleifendurchlauf: 50000
Schwarz: 129
Rot: 254
Grün: 17
Gelb: 0
Gesamtanzahl der Mitarbeiter: 400
% Wahrscheinlichkeit 0

Fasko
 
Zuletzt bearbeitet:

Zurück
Oben