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?
 

Matze

Weltenwanderer
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
 

zerix

Hausmeister
Moderator
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:

WenzelPaul

Mitglied
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.
 

zerix

Hausmeister
Moderator
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
 

TheJadix

Erfahrenes Mitglied
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:

Stigma

Gesperrt
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.
 

WenzelPaul

Mitglied
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 !
 

Stigma

Gesperrt
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:

WenzelPaul

Mitglied
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"
 

Stigma

Gesperrt
So erzeugt man eine Zufallszahl
Um einen Array anzusprechen benötigt man die Ideces! Du kannst sagen Array x mit dem Index 49 soll an stelle von der gerad gezogenen Zufallszahl. Danach verkleinerst du deinen Wertebereich um eins.
Das ganze machst du 6mal.



PHP:
zufallszahl.nextInt(49);  // -1
PHP:
int[ ] lottozahl // int[ y ] y ist der Index
P.S. Die Zufallszahl ist nicht die Zahl die du ziehst sondern soll den Index des Arrays sein!
 
Zuletzt bearbeitet:

Stigma

Gesperrt
Ich habe mir gerade dein Profil durchgelesen und einen kurzen Blick auf deine bisherigen Beiträge geworfen. Du hattest schon einmahl Probleme mit Zufallszahlen.

Java:
Code:
int zz=(int)(1+Math.random()*100); == z.B. 29

Erklärung:

Typ                    int                                            
Name                   zz
ist  zuweisen          = 
als int casten         (int) 
von                    (1+
Zufallszahl            Math.random()
bis                    *100);
 
Zuletzt bearbeitet:

Thomas Darimont

Erfahrenes Mitglied
Hallo,

schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

/**
 * @author Thomas.Darimont
 * 
 */
public class Lottery {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Random random = new Random();
        List<Integer> candidates = new ArrayList<Integer>();
        for (int i = 1; i < 50; i++) {
            candidates.add(i);
        }

        int[] numbers = new int[6];
        for (int i = 0; i < numbers.length; i++) {
            int candidateIndex = random.nextInt(candidates.size());
            numbers[i] = candidates.get(candidateIndex);
            candidates.remove(candidateIndex);
        }

        System.out.println(Arrays.toString(numbers));

    }

}
Gruß Tom
 
A

Artu

Code:
java Code:

import java.io.IOException;
import java.util.Random;

public class lotto {

    static Random zufallszahl = new Random();
    static int[] ziehung = new int[7];

    public static void main(String[] args) throws IOException {

        {

            ziehung[0] = zufallszahl.nextInt(48) + 1;


            for (int i = 1; i < 6; i++) {

                int z1 = zufallszahl.nextInt(48) + 1;

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

                    if (z1 == ziehung[z]) {
                        i--;
                        z=100;
                    }else{
                        ziehung[i] = z1;
                    }
                }
            }



            for (int i = 0; i < 6; i++) {
                System.out.println(ziehung[i]);

            }

        }
    }
}