Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Sonstige Fragen » Random Zahlen sollen nicht doppelt sein! » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Random Zahlen sollen nicht doppelt sein!
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
RavenPixel
Jungspund


Dabei seit: 15.01.2016
Beiträge: 16

Random Zahlen sollen nicht doppelt sein! Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

ich habe nun gestartet ein Spiel zu programmieren (Mastermind, wenn das noch jemand kennt).
Doch gleich zu Anfang kommt ein Problem, dass die Zahlen, die unten als Zahlencode (später sollen es Farben werden) über ein array mit Zufallszahlen gefüllt werden, oftmals eine doppelte Zahl enthalten.

Dies soll verhindert werden, sodass in den 6 Plätzen eindeutige und einmalige Zahlen von 0-9 stehen.

Wie bekomme ich das hin? Hab schon einiges versucht, aber bin auf keinen Nenner gekommen.

Danke schon im Vorraus.

RavenPixel hat dieses Bild (verkleinerte Version) angehängt:
mastermind.jpg

26.02.2016 11:29 RavenPixel ist offline E-Mail an RavenPixel senden Beiträge von RavenPixel suchen Nehmen Sie RavenPixel in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Natürlich kenne ich Mastermind.

2 Möglichkeiten:
die intuitive: speichere in einem bool Array, was schon drankam. Nimm die neue Zahl nur, wenn sie noch nicht verwendet wurde

die effizientere:
Schreibe die Zahlen von 0-9 in ein Array:
code:
1:
0123456789

Würfle eine Zahl von 0-9, das ist der Arrayindex. Tausche die Zahl mit der an Stelle 9:
Beispiel 3:
code:
1:
0129456783

Die 3 ist jetzt fest. Würfle jetzt von 0-8 und tausche mit der Zahl an Stelle 8 (Beispiel: 5)
code:
1:
0129486753

Auf die Weise kriegst du am Ende des Arrays Zufallszahlen, die sich nicht wiederholen.

__________________
Syntax Highlighting fürs Board (Link)
26.02.2016 11:36 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
RavenPixel
Jungspund


Dabei seit: 15.01.2016
Beiträge: 16

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich habe bereits ein array eingebaut, dabei ist das problem dann, dass ich diesen halt

Random r = new Random();

zugewiesen habe und diese in einer for-Schleife besetzt habe...

for (int i = 0; i < zahl.Length; i++)
{
zahl[i] = r.Next(Min, Max);
}

Deshalb dachte ich, dass ich diese damit direkt sortieren kann...
26.02.2016 11:44 RavenPixel ist offline E-Mail an RavenPixel senden Beiträge von RavenPixel suchen Nehmen Sie RavenPixel in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Jetzt willst du die Zufallszahlen auch noch sortiert haben?
Der Codeausschnitt ist C#, oder?

__________________
Syntax Highlighting fürs Board (Link)
26.02.2016 11:47 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
RavenPixel
Jungspund


Dabei seit: 15.01.2016
Beiträge: 16

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

So hatte ich es zumindest vor, jedes spiel sollte ja einen neuen zahlencode bekommen..

ja es ist c#, hatte ich wohl vergessen zu sagen
26.02.2016 11:48 RavenPixel ist offline E-Mail an RavenPixel senden Beiträge von RavenPixel suchen Nehmen Sie RavenPixel in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Sowas?
code:
1:
2:
3:
4:
5:
6:
HashSet<int> numbers = new HashSet<int> ();
Random r = new Random ();
while (numbers.Count < 6) {
	numbers.Add (r.Next (10));
}
Console.WriteLine (string.Join (", ", numbers.OrderBy (x => x)));


__________________
Syntax Highlighting fürs Board (Link)
26.02.2016 11:52 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
RavenPixel
Jungspund


Dabei seit: 15.01.2016
Beiträge: 16

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ist es in diesem Fall normal, dass die Zahlen immer aufsteigend sind?
Also die kleinste Zahl am Anfang und die Größte am Ende?
26.02.2016 11:57 RavenPixel ist offline E-Mail an RavenPixel senden Beiträge von RavenPixel suchen Nehmen Sie RavenPixel in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Du hast etwas von Sortieren geschrieben.
Wenn du die Reihenfolge zufällig haben willst, lösche das OrderBy wieder raus.

__________________
Syntax Highlighting fürs Board (Link)
26.02.2016 11:59 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
RavenPixel
Jungspund


Dabei seit: 15.01.2016
Beiträge: 16

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ach entschuldige... hab nicht richtig nachgedacht und falsch formuliert....

wollte wissen wie ich es innerhalb oder außerhalb der schleife direkt verhindern kann, dass eine zahl doppelt vorkommt.

das war gemeint, nicht sortieren, sry
26.02.2016 12:03 RavenPixel ist offline E-Mail an RavenPixel senden Beiträge von RavenPixel suchen Nehmen Sie RavenPixel in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich habe ein HashSet verwendet. Das stellt sicher, dass jede Zahl nur einmal vorkommt.

Wenn du mit der Minimalzahl von Random.Next() auskommen willst, nimm das:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
int n = 10; int k = 6;
int[] numbers = Enumerable.Range (0, n).ToArray ();
Random r = new Random ();
for (int i = 0; i < k; i++) {
	int index = r.Next (i, n);
	int tmp = numbers [index];
	numbers [index] = numbers [i];
	numbers [i] = tmp;
}
Console.WriteLine (string.Join(", ", numbers.Take(k)));


__________________
Syntax Highlighting fürs Board (Link)
26.02.2016 12:11 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
RavenPixel
Jungspund


Dabei seit: 15.01.2016
Beiträge: 16

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen Dank, jetzt hat es funktioniert smile
26.02.2016 13:04 RavenPixel ist offline E-Mail an RavenPixel senden Beiträge von RavenPixel suchen Nehmen Sie RavenPixel in Ihre Freundesliste auf
progger
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das leute schon spiele programmieren . Geil großes Grinsen

Ich bin schon mit den Grundlagen überlastet
09.03.2016 17:04
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Sonstige Fragen » Random Zahlen sollen nicht doppelt sein!