Mastermind Spiel

Feras

Aktives Mitglied
Hi, ich soll zwei positive ganze Zahlen n und k einlesen. Anschließend soll ich zufällig eine Folge von k natürlichen Zahlen aus der Menge {1, . . . , n} erzeugen. Dabei dürfen auch Zahlen mehrfach vorkommen. Nun soll der Nutzer die Zahlen im Spiel raten können und bei richtigen ZAhel neine MEldung erhalten.

Das versuche ich zu realisieren und habe das Problem, dass ich bei der Ausgabe nicht weiß, welche Zahl richtig geraten wurde, da nur komischer Code herauskommt und ich nicht weiß warum? Zusätzlich bin ich mir auch noch nicht sicher, ob der Algo so stimmt :/


MfG Feras


Java:
import java.util.Random;
import java.util.Scanner;

public class Mastermind {

	public static int[] zufall(int n, int k) {

		int[] result = new int[k], set = new int[n + 1];
		int rndIndex;
		Random rnd = new Random();

		for (int i = 0; i <= n; i++)	{
			set[i] = i;
			
		}
		
		for (int i = 0; i < k; i++) {
			
			rndIndex = rnd.nextInt(n + 1 - i);
			result[i] = set[rndIndex];
			set[rndIndex] = set[n - i];
		}

		return result;
	}

	public void prüfen(int[] eingabe, int[] result, int k) {

		for (int counter = 0; counter < k; counter++) {

			if (eingabe[counter] == result[counter]) {

				System.out.println("An der Stelle: [ " + (counter + 1)
						+ "] war die Zahl: " + eingabe + " richtig ");

			}

		}
	}

	public static void main(String[] args) {

		Mastermind spiel = new Mastermind();

		Scanner input = new Scanner(System.in);

		System.out.println("Geben Sie bitte n ein: ");
		int n = input.nextInt();

		System.out.println("Geben Sie bitte k ein: ");
		int k = input.nextInt();

		int[] eingabe = new int[k];

		System.out.println("Raten Sie Ihre Zahlen: ");

		for (int i = 0; i < eingabe.length; i++) {

			eingabe[i] = input.nextInt();
		}

		spiel.zufall(n, k);
		spiel.prüfen(eingabe, zufall(n, k), k);

	}
}
 

Khal Drogo

Bekanntes Mitglied
Hallo Feras :)

Zunächst mal solltest du deine Methode prüfen umbenennen, da diese einen Umlaut enthält:
Java:
// die Übergabe des Parameters k könntest du dir auch sparen, da k in deinen Arrays steckt...
public void pruefen(int[] eingabe, int[] result, int k) {...}
Der "komische" Code wird ist vermutlich die Stelle, an der die richtig geratene Zahl steht? Wenn ja, liegt das daran, dass du in Zeile 34 nicht die Zahl, sondern die Speicherstelle des Arrays eingabe ausgibst.
Java:
// Das hier sollte funktionieren: eingabe durch eingabe[counter] ausgetauscht
System.out.println("An der Stelle [" + (counter + 1) + "] war die Zahl " + eingabe[counter] + " richtig.");
Überdenke nochmal deine Methode zufall, diese Methode soll doch lediglich ein int-Array mit k zufälligen Werten liefern, wieso benötigst du also das set-Array? Du kannst es dir hier schon deutlich einfacher machen. Nebenbei erzeugst du theoretisch eine Folge mit Zahlen aus dem Intervall [0, n], ich glaube nicht, dass das gewollt ist.
In Zeile 62 rufst du deine Methode zufall auf, um zufällige Zahlen für dein Spiel zu generieren, in Zeile 63 willst du diese prüfen. Als Parameter für deine zufällige Zahlenfolge gibst du allerdings deine Methode an, was dazu führt, dass du eine neue Folge erzeugst. Du solltest also entweder das Ergebnis aus Zeile 62 speichern und in Zeile 63 übergeben, oder Zeile 62 einfach weglassen.

Vielleicht solltest du in deinen Code ein paar Kommentare für uns einfügen. Das hier sind schon ein paar Zeilen, für jemanden, der dir helfen will heißt das, dass er sich erst einmal ordentlich mit dem Code auseinandersetzen muss. Durch Kommentare ist dein Gedankengang einfacher nachvollziehbar und Fehler können einfacher identifiziert werden, zudem kommt es schon mal häufiger vor, dass einem selbst beim Kommentieren Fehler auffallen :)

Mit freundlichen Grüßen
Xelsarion
 
Zuletzt bearbeitet:

Feras

Aktives Mitglied
Danke für die Hilfe^^

So, ich habe jetzt erstmal die Methode "zufall" aufgeräumt und in der main den Methodenaufruf verkürzt.

Und ich möchte ja, dass die aktuelle "eingabe" zurückgegeben wird, also habe ich jetzt in der Zeile 24 "eingabe[counter]" hinzugefügt.

Ist das Programm jetzt einigermaßen passabel? :)


MfG Feras

Java:
import java.util.Scanner;

public class Mastermind {

	public static int[] zufall(int n, int k) {

		int[] zahlen = new int[k];

		for (int i = 0; i < k; i++) {

			zahlen[i] = (int) (Math.random() * n) + 1;
		}

		return zahlen;
	}

	public void pruefen(int[] eingabe, int[] result, int k) {

		for (int counter = 0; counter < k; counter++) {

			if (eingabe[counter] == result[counter]) {

				System.out.println("An der Stelle: " + (counter + 1)
						+ " war die Zahl: " + eingabe[counter] + " richtig ");

			}

		}
	}

	public static void main(String[] args) {

		Mastermind spiel = new Mastermind();

		Scanner input = new Scanner(System.in);

		System.out.println("Geben Sie bitte n ein: ");
		int n = input.nextInt();

		System.out.println("Geben Sie bitte k ein: ");
		int k = input.nextInt();

		int[] eingabe = new int[k];

		System.out.println("Raten Sie Ihre Zahlen: ");

		for (int i = 0; i < eingabe.length; i++) {

			eingabe[i] = input.nextInt();
		}

		spiel.pruefen(eingabe, zufall(n, k), k);

	}
}
 

Khal Drogo

Bekanntes Mitglied
Sieht gut aus :)

Ob es das macht, was du willst, kannst du ja selber testen!
Zu deiner Methode pruefen hätte ich weiterhin den Vorschlag, den dritten Parameter wegfallen zu lassen. Das ist natürlich Geschmackssache und dir überlassen, allerdings möchte ich darauf aufmerksam machen, dass k sowohl in deinem eingabe-Array, als auch in deinem result-Array steckt, da k ja gerade gleich der Länge der beiden Arrays entspricht. Alternativ könntest du also schreiben:
Java:
public void pruefen(int[] eingabe, int[] result) {
   // oder counter < result.length, beide Arrays sind theoretisch gleich lang
   for (int counter = 0; counter < eingabe.length; counter++) {
      if (eingabe[counter] == result[counter]) {
         System.out.println("An der Stelle: " + (counter + 1)
            + " war die Zahl: " + eingabe[counter] + " richtig ");
      }
   }
}
Zudem frage ich mich, was dich dazu bewegt, die Methode zufall als static zu deklarieren und die Methode pruefen abhängig vom Objekt zu machen. Das ist auf gar keinen Fall falsch und ich will dir auch nichts anderes vorschlagen, ich frage nur nach, weil es mich persönlich interessiert, was du dir dabei gedacht hast ;)

Gut gemacht und weiter so!

Mit freundlichen Grüßen
Xelsarion
 
Zuletzt bearbeitet:

Feras

Aktives Mitglied
Naja, ich habe die Methode static gemacht, weil mir das eclipse bei der Fehlerbehandlung vorgeschlagen hat. Denn wenn ich die Methode zufall nicht static habe erhalte ich in Zeile 52 bei zufall die Fehlermeldung: " Cannot make a static reference to a non static method zufall(int, int) from the type mastermind.

Hat das denn irgendwelche Nachteile?


MfG Feras
 

Khal Drogo

Bekanntes Mitglied
[...] wenn ich die Methode zufall nicht static habe erhalte ich in Zeile 52 bei zufall die Fehlermeldung: "Cannot make a static reference to a non static method zufall(int, int) from the type mastermind."
Ganz grob gesagt bedeutet das static bei Methoden, dass die Methode nicht vom einzelnen Objekt abhängig ist, sondern von der Klasse. Wenn du also die Methode zufall static hast und sie dann aufrufen willst, würde man normalerweise Mastermind.zufall(...); schreiben. Wenn du das static weg machst, gehört die Methode zum Objekt. Das hast du ja auch bei der Methode pruefen gemacht. Und die rufst du auf, indem du Objekt.Methode(); schreibst. In Zeile 52 selbst machst du das ja.

Die Erklärung vom Schlüsselwort static ist an dieser Stelle alles andere als einwandfrei, aber vielleicht hilft dir das ja beim Verständnis bzw. der Vorstellung :)
Nachteile seh ich an der Stelle nicht wirklich, ebenso wenig wie Vorteile. Wenn du allerdings keinen speziellen Grund hast, das so zu machen, würde ich es vermutlich einheitlich machen. Falls du beides static machen solltest, kannst du dir das Objekt spiel sparen.
Vielleicht kann an der Stelle ein richtiger Experte mehr dazu sagen, geht mir dann auch zu sehr ins Detail, würde ich mal behaupten ;)

Mit freundlichen Grüßen
Xelsarion
 
Zuletzt bearbeitet:

Khal Drogo

Bekanntes Mitglied
Solange ..., bis ... hört sich doch schonmal sehr nach einer Schleife an ;)
Die Bedingung könnte bspw. eine Variable sein, die dann auf false gesetzt wird, wenn alle Zahlen erraten wurden.

Hilft dir das weiter?

Mit freundlichen Grüßen
Xelsarion
 

Khal Drogo

Bekanntes Mitglied
So wie du es jetzt gemacht hast, müsstest du es eigentlich schon in der main machen.. Umschreiben musst du dafür aber sowieso wieder einiges.
In der Methode fängst du nichts damit an, da du ja immer andere eingabe-Arrays brauchst :)

Mit freundlichen Grüßen
Xelsarion
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
C Mastermind Java Basics - Anfänger-Themen 2
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
K LinkedList aus Arrays ( Lösungsraum Mastermind ) Java Basics - Anfänger-Themen 5
V MasterMind Syntax Probleme Java Basics - Anfänger-Themen 5
G MasterMind Java Basics - Anfänger-Themen 6
F Mastermind Java Basics - Anfänger-Themen 2
S Mastermind problem Java Basics - Anfänger-Themen 2
PrograJan Poker Spiel ruückfrage Java Basics - Anfänger-Themen 8
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
I Threads Spiel gol Java Basics - Anfänger-Themen 6
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
enesss tictactoe spiel Java Basics - Anfänger-Themen 5
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
Ekooekoo Hilfe spiel Java Basics - Anfänger-Themen 5
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
Kennewick Basketball Spiel Ergebnisse Java Basics - Anfänger-Themen 11
X Erste Schritte Hilfe bei einem kleinen Spiel. Java Basics - Anfänger-Themen 19
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
I Simples Risiko-Spiel Java Basics - Anfänger-Themen 5
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
C Java Spiel Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
B Memory Spiel Java Basics - Anfänger-Themen 29
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
A Breakout-Spiel , Ball mit Platten abprallen lassen Java Basics - Anfänger-Themen 1
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
M Spiel programmieren Java Basics - Anfänger-Themen 16
Spencer Reid Feedback zu kleinem Spiel Java Basics - Anfänger-Themen 4
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
I Spiel Java Basics - Anfänger-Themen 34
H ein einfaches Tic Tac Toe Spiel Java Basics - Anfänger-Themen 1
I Spiel programmieren. Java Basics - Anfänger-Themen 16
B Hilfe bei Escape - Spiel Java Basics - Anfänger-Themen 6
S Java-Spiel Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
K Klassen Registrierungsseite für ein Spiel Java Basics - Anfänger-Themen 6
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 2
M Brauche Tipps für ein Spiel Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
Mxxxt Mosaik Spiel - Steuerpanel wird nicht angezeigt Java Basics - Anfänger-Themen 5
M Erste Schritte Zufallszahl Spiel Problem Java Basics - Anfänger-Themen 7
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
H Spiel Kniffel: Gesamtes Array untersuchen. Java Basics - Anfänger-Themen 15
Tacofan Hangman als fertiges Spiel Java Basics - Anfänger-Themen 7
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
C Klassen Sudoku-Spiel Werte werden nicht gesetzt Java Basics - Anfänger-Themen 4
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
W Tic Tac Toe Spiel ohne Arrays Java Basics - Anfänger-Themen 7
S Im objektorientiertem "Spiel" kämpfen Java Basics - Anfänger-Themen 3
I Klassen Umsetzungsfrage zu Spiel "Zuul" Java Basics - Anfänger-Themen 3
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
J Java Spiel Zufallsauswahl für Zugbeginn Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Erste Schritte Spiel: Glückliches Sieben Java Basics - Anfänger-Themen 3
T Hangman spiel Java Basics - Anfänger-Themen 5
J 2 Pc's - Spiel gegeneinander ?! Java Basics - Anfänger-Themen 3
V Spiel Programmieren Java Basics - Anfänger-Themen 9
P 2D-Spiel und Bildschirmgröße Java Basics - Anfänger-Themen 2
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
T Blöcke für ein Jump and Run Spiel Java Basics - Anfänger-Themen 8
S 2D-Spiel mit Threads... Java Basics - Anfänger-Themen 3
S 2D-Spiel im Vollbild an größe anpassen? Java Basics - Anfänger-Themen 3
M hangman spiel Java Basics - Anfänger-Themen 1
K JTextField in ein Spiel einfügen Java Basics - Anfänger-Themen 2
S Mosaik Spiel Java Basics - Anfänger-Themen 19
pinar memory spiel Java Basics - Anfänger-Themen 10
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
K Erste Schritte Wie mache ich weiter? (Spiel-Menü) Java Basics - Anfänger-Themen 9
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
K Schere Stein Papier Spiel Java Basics - Anfänger-Themen 3
A Feedback zum Spiel Java Basics - Anfänger-Themen 5
F Hilfe bei meinem Spiel Java Basics - Anfänger-Themen 3
C Lotto Spiel Java Basics - Anfänger-Themen 23
Jagson Dotcom Spiel - Dots Random setzen Java Basics - Anfänger-Themen 8
Dogge Farben-Spiel Java Basics - Anfänger-Themen 20
K Diverse Bugs in einem Snake Spiel Java Basics - Anfänger-Themen 4
2 Lotto-Spiel Java Basics - Anfänger-Themen 9
X Datentypen Probleme mit Char bei meinem 1. Spiel Java Basics - Anfänger-Themen 20
D Erste Schritte Einstieg in die Java Spiel Programmierung Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben