Doppelte Zahlen bei Lotto verhindern

Status
Nicht offen für weitere Antworten.

Vril

Bekanntes Mitglied
Hallo,
hab ein kleines Lottoprogramm geschrieben. Das Problem dabei ist das auch doppelte Zahlen ausgegeben werden, das bei Lotto aber keinen Sinn macht. Habe versucht das Problem jetzt mit einer if Verzweigung abzufangen und dann einen false werd zurückzugeben. Daraus entstand dann wieder ein neues Problem, und zwar werden dann logischerweise überhaupt keine Zahlen angezeigt.

Hat dazu vielleicht jemand eine Lösung dem Problem zu begegnen?
Code:
import java.awt.*;
import java.awt.event.*;

public class Lotto_awt extends Frame implements ActionListener {
	Button zahl;
	double zahlkomma;
	boolean gedrueckt = false;
	int zahl1, zahl2, zahl3, zahl4, zahl5, zahl6;
	
	public Lotto_awt (String title) {
		super (title);
		setSize(400,200);
		setLayout(new FlowLayout());
		
		Button zahl = new Button("Nächste Zahl");
		add(zahl);
		zahl.addActionListener(this);
		setVisible(true);
	}
	public void actionPerformed(ActionEvent event) {
		gedrueckt = true;
		zahl1 = (int)(Math.random()*49)+1;
		zahl2 = (int)(Math.random()*49)+1;
		zahl3 = (int)(Math.random()*49)+1;
		zahl4 = (int)(Math.random()*49)+1;
		zahl5 = (int)(Math.random()*49)+1;
		zahl6 = (int)(Math.random()*49)+1;
		if (zahl1==zahl2||zahl1==zahl3||zahl1==zahl4||zahl1==zahl5||zahl1==zahl6||
		    zahl2==zahl3||zahl2==zahl4||zahl2==zahl5||zahl2==zahl6||
		    zahl3==zahl4||zahl3==zahl5||zahl3==zahl6||
		    zahl4==zahl5||zahl4==zahl6||
		    zahl5==zahl6){
		gedrueckt = false;
		
		}
		
		repaint();
	}

	public void paint(Graphics g) {
		if(gedrueckt){
			g.drawString("Die Lottozahle, 6 aus 49",50,100);
			g.drawString(""+zahl1+", "+ zahl2+", " + zahl3+", "
			               +zahl4+", "+ zahl5+", " + zahl6,50,125);
			
		}
	}	
	public static void main (String[] args){
		new Lotto_awt ("Lottozahlen berechnen");
	}
}
 

bambi

Bekanntes Mitglied
Hab' jetzt gerade nicht sooo die Zeit, aber ich wuerde mir vielleicht einfach alle gezogenen Zahlen in ein array schreiben und dann bei jeder neuen Zahl vergleichen, ob sie schon drin steht. Wenn nicht - okay; wenn doch - neu suchen.

Gibt bestimmt auch noch einige bessere Loesungen - mal ein Anfang... Dir faellt sicher noch was besseres ein.
 
B

bygones

Gast
speichere die Zahlen in einer Collection (Vector, ArrayList) oder wie schon gesagt in einem Array und überprüfe für jede Zahl ob sie schon gezogen worden ist (vorhanden in Collection, Array). wenn nicht hinzufügen und ausgeben

BTW: Was hat deine Frage mit dem Titel zu tun ????????
 

mic_checker

Top Contributor
Oder du könntest mit Mengen arbeiten, die add Methode bei HashSet gibt ja false zurück false das Element welches du versuchst hinzuzufügen schon in der Menge enthalten ist.
 

Karl

Aktives Mitglied
Hallo,

für dieses Problem ist es am einfachsten, die n=49 Zahlen vorher in ein Array zu packen.
Dann wird zufällig ein Array-Platz m bestimmt und die Zahl "gezogen".

int m = myRandom.nextInt(n);
int val = arr[m];

Nach der Ziehung wird die gezogene Zahl "nach hinten getauscht" und der Suchraum um eins verkleinert.
arr[m] = arr[n-1];
arr[n-1] = val;
n--;

Die bereits gezogene Zahl ist nun außerhalb des Suchraums, es kann die nächste Zahl gezogen werden, usw.

So kommst Du ohne Prüfung aus, ob eine Zahl bereits gezogen wurde, denn die gezogenen fliegen
automatisch aus dem Suchraum.

Gruß,

Karl
 

mic_checker

Top Contributor
Hab hier mal die Lösung zu obigem Ansatz (mit HashSet):

Code:
import java.util.*;

public class Lotto1
{
	public static void main(String[] args)
	{
		int zahl,count = 0;
		HashSet lotto = new HashSet();		
		Random gen = new Random();
		
		/* Es sollen 6 Zahlen gezogen werden */
		while(count < 6)
		{
			/* 0 ist nicht erwünscht */
			do
			{
				zahl = gen.nextInt(50);
			}while(zahl == 0);
			
			if(!lotto.add(new Integer(zahl)))
				continue;
			
			System.out.println(++count+".Zahl = "+zahl);			
		}
			
	}
}

Ich hoffe es ist ok, wenn mal ganzer Code gepostet wird, normalerweise würde ich ja Teil-Code weglassen damit der andere noch überlegen muss was einzufügen ist, allerdings ist das bei dem Beispiel recht schwer....

müsste so aber eigentlich klappen
 

Karl

Aktives Mitglied
Hallo,

stimmt, funktioniert so.

Ich habe mal spaßeshalber die oben geschilderte Variante probiert und (beide Varianten ohne System.out) gemessen:
Code:
    private static final int[] ZAHLEN = new int[49];
    static {
        for (int i = 0; i < 49; i++) {
            ZAHLEN[i] = i+1;
        }
    }
    
    private static final Random rand = new Random();    

    public static void doVariante2() {
        int searchMax = 49;
        int val = 0;
        for (int i = 0; i < 6; i++) {
            int pos = rand.nextInt(searchMax);
            val = ZAHLEN[pos];
            ZAHLEN[pos] = ZAHLEN[searchMax-1];
            ZAHLEN[searchMax-1] = val;
            searchMax--;
            //System.out.println((i+1) + ".Zahl = " + val);
        }
    }


Letztere ist etwas schneller, aber das spielt für's Lottozahlen-Ziehen erst eine Rolle, wenn Du Millionen von Ziehungen machst :D .

Gruß,

Karl
 

Vril

Bekanntes Mitglied
Danke, so funktionier es!
Aber wie geht es, das ich in GUI alle Zahlen in einem Frame ausgebe.
Übers DOS Fenster mach ich es ja so:
//System.out.println((i+1) + ".Zahl = " + val);

Aber in GUI zeigt er ja bei z.B. g.drawString(""+i+", ", 50,50); immer nur eine Zahl an!

Hat dazu jemand zufällig eine Lösung?
 

Wildcard

Top Contributor
Die letzten beiden Paramter von drawString geben die Position an.
Wenn du die veränderst kannst du auch mehr als einen String in den Frame zeichnen.
 

Vril

Bekanntes Mitglied
@Wildcard
Also das mit der Positionierung hinsichtlich g.drawString(" ", x, y) bzgl. x und y Koordinate ist mir schon klar.
Aber in diesem Fall besteht ja i aus mehreren Zahlen, den Lottozahlen, bei einer verwednung von i in einem g.drawString wird ja nur eine Zahl angezeigt und die anderen darübergeschrieben, so dass man nichts mehr erkennen kann!

Ich hab auch schon folgendes versucht:
g.drawString("Zahl 1 "+i, 50,50);
g.drawString("Zahl 2 "+i, 50,100);

aber auch in diesem Fall wird immer nur eine Zahl angezeigt und die restlichen darüber geschrieben!

Gibt es dafür eine Lösung?
 
B

bygones

Gast
ich würde eher mit Componenten wie (J)Label, (J)TextField arbeiten, anstatt das ganze zu zeichnen....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
D Java doppelte Zahlen auch über 10 in einem String entfernen Java Basics - Anfänger-Themen 2
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
D Doppelte For Schleife / Array Java Basics - Anfänger-Themen 3
C das Doppelte des Wertes in der Console ausgeben Java Basics - Anfänger-Themen 10
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4
N Best Practice Doppelte und einfach Anführungsstriche in Runtime.getruntime().exec() Java Basics - Anfänger-Themen 6
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
L Doppelte Schleife Anpassen Java Basics - Anfänger-Themen 5
W Map doppelte Values löschen Java Basics - Anfänger-Themen 3
S CSV auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 8
S Doppelte Liste Einfügen Java Basics - Anfänger-Themen 1
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
S Input/Output Doppelte Input-Abfrage Java Basics - Anfänger-Themen 3
K Input/Output Doppelte Ausgabe Java Basics - Anfänger-Themen 5
S Erste Schritte Doppelte Ausführung? Java Basics - Anfänger-Themen 4
E Threads Doppelte Threads beenden Java Basics - Anfänger-Themen 4
J Variablen Doppelte Werte in Int Array Java Basics - Anfänger-Themen 10
D Java doppelte Zahl/Zeichen in einem String entfernen Java Basics - Anfänger-Themen 6
S ArrayList Gruppieren, "Doppelte Werte" Addieren Java Basics - Anfänger-Themen 5
O Doppelte For-Scheife Java Basics - Anfänger-Themen 6
E Array doppelte Einträge Java Basics - Anfänger-Themen 2
S Variablen Array in ArrayList auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 4
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
P Doppelte Datensätze aus CSV-Datei löschen Java Basics - Anfänger-Themen 17
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
P Doppelte Einträge in eine List Java Basics - Anfänger-Themen 5
S Array befüllen & auf doppelte werte prüfen Java Basics - Anfänger-Themen 6
B Klassen Doppelte werte Filtern XML, Datenbank und DOM Java Basics - Anfänger-Themen 3
R Doppelte löschen Java Basics - Anfänger-Themen 6
C Doppelte Einträge aus String [] Array entfernen. Java Basics - Anfänger-Themen 5
K Doppelte namen bei random Java Basics - Anfänger-Themen 3
U Doppelte Interfcae Implementierung Java Basics - Anfänger-Themen 10
M doppelte Einträge Emailempfänger... Java Basics - Anfänger-Themen 35
G txt-File als DB>doppelte Einträge verhindern/Suche/... Java Basics - Anfänger-Themen 10
DerGroßeNargus Doppelte Liste initialisieren Java Basics - Anfänger-Themen 2
H Datentypen Doppelte Verkette Liste - Verständnissproblem Java Basics - Anfänger-Themen 5
T Doppelte Liste Java Basics - Anfänger-Themen 8
R Schleife Doppelte Daten löschen Java Basics - Anfänger-Themen 3
V Doppelte Zahl suchen Java Basics - Anfänger-Themen 14
L Hilfe, doppelte Zufallszahlen Java Basics - Anfänger-Themen 13
G List suchen und doppelte rausfiltern Java Basics - Anfänger-Themen 3
T Doppelte Anführungszeichen ersetzen?? Java Basics - Anfänger-Themen 4
Luk10 Doppelte for-schleife Java Basics - Anfänger-Themen 7
P Doppelte Einträge in mehreren Textfiles finden und ausgeben Java Basics - Anfänger-Themen 8
T Array: Doppelte Charakteren löschen - Ein Lösungsversuch Java Basics - Anfänger-Themen 37
P doppelte Werte im Array ausgeben. Java Basics - Anfänger-Themen 4
J doppelte Einträge in einem Array Java Basics - Anfänger-Themen 7
M Aufgabe: Array auf doppelte Zahl prüfen Java Basics - Anfänger-Themen 8
-horn- Doppelte Einträge entfernen, aus Array, List oder sonstwas Java Basics - Anfänger-Themen 9
G _NUR_ doppelte Einträge in einem Array behalten Java Basics - Anfänger-Themen 3
J Doppelte Integer aus einem Array entfernen - seltsames Prob. Java Basics - Anfänger-Themen 5
G doppelte Einträge im String Array löschen Java Basics - Anfänger-Themen 21
C Doppelte Punktnotation Java Basics - Anfänger-Themen 2
0 ArrayList - doppelte Einträge entfernen? Java Basics - Anfänger-Themen 9
S Methode, um doppelte Einträge in Array zu finden Java Basics - Anfänger-Themen 5
F doppelte Elemente in HashSet Java Basics - Anfänger-Themen 5
G java.util.LinkedList: Doppelte Elemente vermeiden Java Basics - Anfänger-Themen 5
G Wie doppelte Einträge in ComboBox vermeiden ? Java Basics - Anfänger-Themen 9
M Doppelte Einträge in einer datei löschen(nach timestamp)! Java Basics - Anfänger-Themen 4
D Doppelte Einträge einer Liste löschen Java Basics - Anfänger-Themen 6
B 2 ELists vergleichen und doppelte Einträge löschen Java Basics - Anfänger-Themen 11
S "doppelte" if-Anweisung Java Basics - Anfänger-Themen 10
G Doppelte (Paar) Werte in einem Vektor finden Java Basics - Anfänger-Themen 6
F Doppelte Datensätze zusammenziehen Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
M negative Zahlen bei Intervallen Java Basics - Anfänger-Themen 10
M 3 Zahlen miteinander vergleichen Java Basics - Anfänger-Themen 18
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
J Operatoren Zahlen addieren Java Basics - Anfänger-Themen 13
B Threads Counter mit ungeraden Zahlen Java Basics - Anfänger-Themen 32
JavaBeginner22 Java 2 Zufalls zahlen generieren. Java Basics - Anfänger-Themen 11
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
M Stream mit den ersten n natürlichen Zahlen Java Basics - Anfänger-Themen 4
D Größtes Palindrom Produkt aus zwei dreistelligen Zahlen Java Basics - Anfänger-Themen 60
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
sserio Befreundete Zahlen Java Basics - Anfänger-Themen 7
AhmadSlack Verzweigungen zahlen multiplizieren Java Basics - Anfänger-Themen 4
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
U Lotto-Zahlen App Java Basics - Anfänger-Themen 34
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
P Zweidimensionales Array als Tabelle mit befüllten Zahlen Java Basics - Anfänger-Themen 10
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben