Java :: Aufgabe #121 :: Lösung #1

2 Lösungen Lösungen öffentlich
#121

guided Probieren à la Mastermind

Fortgeschrittener - Java von Veigar - 13.01.2016 um 17:42 Uhr
Liebe Leute,

Schreibt ein Programm das für eine 8-stellige Binärzahl durch ausprobieren herausbekommt.

Schreibt dafür zunächst eine Funktion die für eine Zahl die Anzahl der "korrekten Bits" (Also Bits die mit der zu findenden Zahl übereinstimmen) zurück gibt. (zum Beispiel bei zu findender Zahl:11111111; deinefunktion(00110011)=4) und entwickel dann ein Probier-System das zunächst eine "Anfangszahl" verwendet und dann den nächsten Versuch auf die Übereinstimmung der Zahl mit der zu findenden Zahl anpasst.

ps: Bitte keine Codes die simpel 256 (2**8) mögliche Integer überprüfen!
pss: Diese Aufgabe ist eine Variation des Spiels "Mastermind"!


Viel Erfolg!

#1
vote_ok
von Kusarr (100 Punkte) - 10.06.2016 um 23:58 Uhr
Bin noch recht neu im Programmieren. Müsste aber soweit funktionieren, sofern ich die Aufgabe richtig verstanden habe ^^

Quellcode ausblenden Java-Code
import java.util.regex.Pattern;

import javax.swing.JOptionPane;

public class Program
{
	private static final String masterLockString = "10011011";
	private static int masterLockInt = Integer.parseInt(masterLockString, 2);

	public static void main(String[] args)
	{
		String playerKey = "";
		boolean keyIsCorrect = false;
		int guessKeyCounter = 0;

		while (!keyIsCorrect)
		{
			guessKeyCounter++;
			
			playerKey = JOptionPane.showInputDialog("Guess " + guessKeyCounter + "\n\nEnter your 8-Bit key: ");

			if (checkKey(playerKey))
			{
				keyIsCorrect = compareKey(playerKey);
			}
		}

		JOptionPane.showMessageDialog(null, "'" + playerKey + "' is the right key!\n\nYou have " + guessKeyCounter + " attempts required.",
				"YOU WON", JOptionPane.INFORMATION_MESSAGE);
	}

	private static boolean checkKey(String playerKey)
	{
		if (playerKey.length() != 8)
		{
			JOptionPane.showMessageDialog(null, "Your key has not 8 bits!", "WRONG KEY", JOptionPane.ERROR_MESSAGE);
			return false;
		}

		if (!Pattern.matches("[01]*", playerKey))
		{
			JOptionPane.showMessageDialog(null, "Your key is not binary!", "WRONG KEY", JOptionPane.ERROR_MESSAGE);
			return false;
		}

		return true;
	}

	private static boolean compareKey(String playerKey)
	{
		int parsedKey = Integer.parseInt(playerKey, 2);
		int exclusiveOrResult = masterLockInt ^ parsedKey;

		if (exclusiveOrResult == 0)
		{
			return true;
		}

		String resultString = Integer.toBinaryString(exclusiveOrResult);

		int matches = 8 - resultString.length();

		for (int i = 0; i < resultString.length(); i++)
		{
			if (resultString.charAt(i) == '0')
			{
				matches++;
			}
		}

		JOptionPane.showMessageDialog(null, "Your key:\t" + playerKey + "\n\nCorrect bits:\t" + matches, "RESULT\n",
				JOptionPane.INFORMATION_MESSAGE);

		return false;
	}
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1816479

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.