Zufallszahl ohne Wiederholung im Array

WenzelPaul

Mitglied
Hallo,

ich versuche mich grad mal wieder an Java Spielerein :)
Ich wollte jetzt bischen mit Lotto zahlen rumspielen.
Ich habe ein Array wo die ganze Zahlen 1-49 abgespeichert sind.
Ich kann auch welche erstellen aber wie vermeide ich Wiederholungen.
Beim Lotto werden die Zahlen ja auch nicht doppelt gezogen.

PHP:
import java.io.IOException;
import java.util.Random;
public class lotto
{
    static Random zufallszahl = new Random();
	static int[ ] lottozahl = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49};
	static int[ ] ziehung =  new int [ 7 ];
	static int[ ] temp =  new int [ 7 ];
	
	
    public static void main(String[] args) throws IOException
    {
		int i =0;
		
		int z1 =1;
		for (i =0; i <=6; i++)
		{	
		    	temp[z1] = zufallszahl.nextInt(49);
		    	while(temp[z1] != ziehung[i])
		    	{
		    	ziehung[i] = temp[z1];
		    	}
		    	System.out.println(ziehung[i]);	    	
		}
	}
}

Es muss ja an der Bedingung der while Schleife liegen denke ich mal.
Wie bekomme ich das mit meinem Code hin, dass ich keine Wiederholungen habe?
 
Ich glaube da musst du eben manuell prüfen und gegebenenfalls ersetzen. Dürfte ja auch nicht so schwer sein bei 6 Zahlen.

PHP:
	static int[ ] lottozahl = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49};
Aber mal ne Frage, wofür diese Zeile, bzw dieses Array
 
Hallo,

du könntest das ganze einfach in ein Set packen. Wenn das Set dann die Size von 7 hat, kann die Schleife beendet werden.

Code:
import java.util.HashSet;
import java.util.Random;
import java.util.Set;


public class Lotto
{

  public static void main(String[] args)
  {
    Random random = new Random();
    
    Set<Integer> lotto = new HashSet<Integer>();
    
    while(lotto.size() < 7){
      
      lotto.add(random.nextInt(49));
      
    }
    
    for(Integer i : lotto){
      System.out.println(i);
    }
  }
  
}

MFG

Sascha
 
Zuletzt bearbeitet:
int[ ] lottozahl = { 1, 2, 3, 4, 5, 6, 7, ... , 49};
int[ ] ziehung = new int [ 6 ] ;
int[ ] tipp = new int [ 6 ] ;
sollen die Variablen sein die wir verwenden sollen ... das ja mein problem :[

Ein Programm in dem die Ziehung der Lottozahlen durch Zufallswerte simulieren werden. Eine Ziehung besteht aus 6 Zufallszahlen aus dem Intervall [1 ... 49], wobei sich keine Zufallszahl wiederholen darf. Ein Tipp besteht auch aus 6 Zahlen, die hier ebenfalls per Zufall aus dem Intervall [1 ... 49] ohne Wiederholung gewählt werden.

Das mit dem Set ist ja nett und ideal für sowas aber halt nicht mit den Variablen.
 
Du kannst die Zahlen ja danach in die Variablen schreiben. Du hättest ja auch erwähnen können, dass du die Variablen so nutzen musst.

Wenn du es ganz in die Variablen machen musst, musst du halt bei jeder Zahl kontrollieren ob sie nicht schon im Array steht. Falls sie drin steht, lässt du dir die nächste Zahl geben und testest die. Das ganze geht dann so lange bis das Array gefüllt ist.

MFG

Sascha
 
Hi,

oder du nimmst die Zahl aus dem lottozahl-Array herraus (setzt sie 0) und
prüfst darauf nach dem erzeugen der Zufallszahlen (index 0-48 fürs Array) !

Hat sowas realistisches, die Kugeln sind ja auch raus aus dem Ziehungsgerät !

Gruß Jadix
 
Zuletzt bearbeitet:
Hallo,
Ich habe ein Array wo die ganze Zahlen 1-49 abgespeichert sind.
Ich kann auch welche erstellen aber wie vermeide ich Wiederholungen.
Beim Lotto werden die Zahlen ja auch nicht doppelt gezogen.

PHP:
	static int[ ] lottozahl = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49};

Die Lösung die du suchst ist folgende:

Du hast deinen Array. Diesen füllst du am besten mit zahlen aus einer for-Schleife die bis 48 geht. Nun erzeugst du eine Zufallszahl der du einem bestimmten Wertebereich zuweist. Du schränkst die Zufallszahlen suche auf 1 und 49 ein. Hast du nun eine Zahl gezogen kommt die letze Zahl aus dem Array an deren Position und dein Zufallsgenerator wird um eins kleiner. Damit ist es unmöglich eine Zahl doppelt zu ziehen. ;-)

Ich hoffe ich konnte dir helfen und würde mich über eine Rückmeldung sehr freuen. Sollten weitere Probleme entstehen dann sag nur bescheid.
 
Du hättest ja auch erwähnen können, dass du die Variablen so nutzen musst.
Sascha

Das meinte ich mit meinem letzten Satz.
"Wie bekomme ich das mit meinem Code hin, dass ich keine Wiederholungen habe?"
Tut mir aber Leid wenn es nicht deutlich rüber kam.

Das Problem allgemein ist, dass ich es einfach nicht hinbekomme. Ideen hab ich auch schon genug gehabt heute. Sitze schon seit heut morgen daran.(jaja lacht nur ;() Hab schon vieles ausprobiert aber bin immer irgendwo hängen gegeblieben.
Das was ich bräuchte ist Beispiel Code.
Ganz normale Zufallslottozahlen erstellen und ziehen ohne Array und ohne Wiederholungen hab ich heute auch schon programmiert. Ich dachte das bringt mich weiter aber nix da.
Vielleicht weiß ja noch jemand was.
Danke aber schonmal !
 
Hast du das Gelesen?

Die Lösung die du suchst ist folgende:

Du hast deinen Array. Diesen füllst du am besten mit zahlen aus einer for-Schleife die bis 48 geht. Nun erzeugst du eine Zufallszahl der du einem bestimmten Wertebereich zuweist. Du schränkst die Zufallszahlen suche auf 1 und 49 ein. Hast du nun eine Zahl gezogen kommt die letze Zahl aus dem Array an deren Position (die gezogene Zahl verschwindet und steht ab nun nicht mehr im Array) und dein Zufallsgenerator wird um eins kleiner. Damit ist es unmöglich eine Zahl doppelt zu ziehen.

Ich hoffe ich konnte dir helfen und würde mich über eine Rückmeldung sehr freuen. Sollten weitere Probleme entstehen dann sag nur bescheid.
 
Zuletzt bearbeitet:
Jo hab ich gelesen.
Weiß nur nicht so recht wie ich das umsetzen soll.
Insbesondere nicht den Teil "Hast du nun eine Zahl gezogen kommt die letze Zahl aus dem Array an deren Position (die gezogene Zahl verschwindet und steht ab nun nicht mehr im Array) und dein Zufallsgenerator wird um eins kleiner"
 
Zurück