Mastermind

tittli

Erfahrenes Mitglied
Hallo
Ich soll in Java ein Mastermind erstellen. Hier die Methode, die automatisch einen Zufallscode erstellt:

Code:
private void makeCode()
	{
		// To be implemented
		String randomColor = " ";
		String codeReturn = " ";
		for (int i = 1; i <= 4; i++)
			{
			int colorValue = (int)(Math.random() * 6) + 1;
			switch (colorValue)
				{
				case 1:
					randomColor = "y";
					break;
				case 2:
					randomColor = "o";
					break;
				case 3:
					randomColor = "r";
					break;
				case 4:
					randomColor = "b";
					break;
				case 5:
					randomColor = "g";
					break;
				case 6:
					randomColor = "p";
					break;
				}
			codeReturn = codeReturn + " " + randomColor;
			}
		System.out.println(codeReturn);
	}

Das ganze funktioniert so.
Nun würde ich das ganze aber gerne so erweitern, dass jede Farbe nur einmal im Code vorkommen kann. Ich stehe völlig auf dem Schlauch, hat irgend jemand eine Idee wie man das umsetzen könnte?

danke und gruss
 
Ups, habe die For Schleife übersehen.

Also möglichkeiten so etwas zu machen, gibt es viele, nur bin ich heute nicht kreativ genug, um "Die Lösung" zu präsentieren. Das hier ist jetzt nur eine Notlösung deines Problems. Den Code habe ich jetzt hier um Browserfenster geschrieben, daher keine Garantie auf Systax oder Tippfehler.

Deine Random Funktion habe ich mal extrahiert

Code:
private String getRandomColor(){
			String randomColor;
			int colorValue = (int)(Math.random() * 6) + 1;
			switch (colorValue)
				{
				case 1:
					randomColor = "y";
					break;
				case 2:
					randomColor = "o";
					break;
				case 3:
					randomColor = "r";
					break;
				case 4:
					randomColor = "b";
					break;
				case 5:
					randomColor = "g";
					break;
				case 6:
					randomColor = "p";
					break;
				}
}

Zunächst initialisierst du eine Liste von Strings und dein Code Return ding

Code:
List<String> myCode = new List<String>();
String codeReturn = " ";

Und dann bastelst du dir eine While Schleife, die so lange läuft, bis der Code vollständig ist:

Code:
while(myCode.size() <= 4){
	String curColor = getRandomColor();
	if(!myCode.contains(curColor)){
		myCode.add(curColor);
		codeReturn += " " + curColor;
	}
}
System.out.println(codeReturn);

Ich bin der Meinung, dass es so t. Würde mich auf ein Feedback freuen, obs funktioniert.

PS: Ich habe jetzt nicht etwa deine Hausaufgabe gemacht, oder?
 
Danke schonmal für den Ansatz.
Also das mit der String-Liste habe ich nicht ganz verstanden, hab das noch nie gesehen. Ich bin blutiger Anfänger in Sachen Java;-)
 
Danke schonmal für den Ansatz.
Also das mit der String-Liste habe ich nicht ganz verstanden, hab das noch nie gesehen. Ich bin blutiger Anfänger in Sachen Java;-)

Naja, es ist keine String Liste, sondern eine Liste (Dynamischer Datentyp), der Strings speichern kann. Eine Liste verfügt dabei um einige Funktionen. Du kannst z.B. abfragen, ob in der Liste bereits ein bestimmtes Objekt drinn ist. Du kannst auch die Anzahl aller Objekte in der Liste abfragen.

Die Idee hinter meinem Ansatz ist, dass das Programm so lange in der Schleife bleibt, bis 4 Objekte in der Liste sind = der Code besteht aus 4 Segmenten.
 
Ist es mit dem contains() auch möglich, Strings abzufragen?
So im Stil von if(codeReturn.contains(randomColor))

gruss
 
Verdammt, ich verzweifle gleich. Warum funktioniert folgender Code nicht? Das ganze endet in einer Endlos-Schleife...

Code:
public class test 
	{
	public static void main(String[] args)
		{
		String randomColor = "";
		String codeReturn = "";
		String curCode = "";
		int codeLength = 1;
		while (codeLength <= 3)
		{
			int colorValue = (int)(Math.random() * 6) + 1;
			switch (colorValue)
				{
				case 1:
					randomColor = "y";
					break;
				case 2:
					randomColor = "o";
					break;
				case 3:
					randomColor = "r";
					break;
				case 4:
					randomColor = "b";
					break;
				case 5:
					randomColor = "g";
					break;
				case 6:
					randomColor = "p";
					break;
				}
			curCode = curCode + randomColor;
			codeLength = codeReturn.length();
			if(!curCode.contains(randomColor))
				{
				codeReturn = codeReturn + randomColor;
				codeLength = codeReturn.length();
				}
		}
		System.out.println(codeReturn);
		}
	}

danke und gruss
 
Hi benutze doch beim nächste mal statt 'code' 'java' dann wird dein Code auch formatiert.

Zu deiner Endlosschleife:
Java:
curCode = curCode + randomColor;
if(!curCode.contains(randomColor))

contains gibt dir hier immer true, da du ja die Farbe schon vorher dranhängst. Daher geht er nie in den if-Block rein und deine Schleife bricht nie ab.
 
Hoppla, hab gar nicht gesehen dass es einen speziellen Formatierer gibt für Java...kommt nicht wieder vor.

Vielen Dank zeja und port29 für die Tipps, es funktioniert endlich so wie ich das wollte!!
jetzt gehts dann an die Auswertung...;-)

gruss
 

Neue Beiträge

Zurück