Lottozahlen

Status
Nicht offen für weitere Antworten.
D

DerMarco

Gast
Hi,

bin gerade dabei ein Lottoprogramm zu schreiben und weiß nicht wie genau ich das mit den doppelten Zahlen löse. Also, das er, wenn eine Zahl doppelt erstellt wird, er dann eine andere erstellt.

Kann mir jemand sagen wie ich das machen soll?

MfG Marco
 

Wildcard

Top Contributor
die einfachste Lösung ist IMHO so:
Code:
	int[] zahlen = new int[6];
	Random random = new Random(System.currentTimeMillis());
	for(int i=0;i<zahlen.length;i++)
	{
		zahlen[i]= random.nextInt(48)+1;
		for(int j=0;j<i;j++)
			if(zahlen[j]==zahlen[i])
				i--;
	}
 

mic_checker

Top Contributor
Allerdings kannst du dir da die Initialisierung mit currentTimeMillis() sparen, da er das standardmäßig selber macht bei Verwendung des Standardkonstruktors Random().....

nur so als anmerkung ;)
 

L-ectron-X

Gesperrter Benutzer
Ich habe mal vor längerer Zeit ein Applet geschrieben, welches das Problem des Threads lösen kann.
Code:
import java.applet.Applet;

public class Lotto extends Applet {
  private int[] zahlen;

  public void init() {
    zahlen = new int[6];
    int aktuellerTipp = 0;

    while(aktuellerTipp < zahlen.length) {
      int gezogeneZahl = (int)(Math.random() * 100);
      
      if(gezogeneZahl < 1 || gezogeneZahl > 49)
        continue;
      else {
         zahlen[aktuellerTipp] = gezogeneZahl;
         
        for(int i = 0; i < aktuellerTipp; i++) {
          if(zahlen[i] == gezogeneZahl) {
               aktuellerTipp--;
          }
        }
      }
      aktuellerTipp++;
    }
    ausgeben();
  }

  private void ausgeben() {
    System.out.println("ausgeben()");
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < zahlen.length; i++) {
      sb.append(zahlen[i]);
      sb.append("   ");
    }
    new MyDialog(sb.toString()).setVisible(true);
  }
}
Ein Dialog, der die Ausgabe anzeigt.
Code:
import java.awt.*;
import java.awt.event.*;

public class MyDialog extends Dialog {
   public MyDialog(String zahlen) {
      super(new Frame(), "Lottozahlen 6 aus 49", true);
      setSize(200, 100);
      setLocationRelativeTo(null);
      setResizable(false);
      addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
            dispose();
         }
      });
      Font f = new Font("Arial", Font.BOLD, 20);
      Label ziehung = new Label(zahlen);
      ziehung.setFont(f);
      add(ziehung);
      pack();
   }
}
 

mic_checker

Top Contributor
Kommt drauf an welchen Ansatz du verfolgst...

Wenn du deine Zahlen in nem Array speicherst , kannst du Arrays.sort(...) verwenden.
 
G

Gast

Gast
Hi, ich bin wohl nicht die einzige die so ihre Probleme mit den Lottozahlen hat...
Also ich wollte per Zufall 7 Zahlen auswählen lassen und diese dann per BubbleSort sortieren. Das mit den Zufallszahlen klappt auch, aber irgendwo muss ein Fehler drin stecken weil ich als Ergebnis sowas:
000000 27 00000 27 47 0000 9 27 47 000 9 27 47 49 usw bekomm

Code:
import java.util.Random;

class BubbleLotto{

  public static void main (String[] args) {

    //Zufallszahlengenerator
    Random rand = new Random();

    int [] zufallszahl = new int [7];

        for (int i=0; i<zufallszahl.length; i++) {
	zufallszahl [i]  = 1 + rand.nextInt (49);

        int tmp;
	int k;
	boolean done;
	
        //Sortieren
          do{
           done = true;
            for (k=0; k<zufallszahl.length-1; k++) {
             if( zufallszahl[k] > zufallszahl[k+1]) {
              tmp = zufallszahl[k]; zufallszahl[k]=zufallszahl[k+1]; zufallszahl[k+1] = tmp;
              done = false;
             }
            }
          }while(!done);
          
          //Ausgabe
          for(k=0; k<zufallszahl.length; k++){
            System.out.print (zufallszahl [k] + " ");}
    }
  }
}

Für schnelle Hilfe wär ich echt dankbar :)
 

chearius

Mitglied
In Zeile 13 fählt einfach die Klammer :) - besser gesagt - eine Klammer vom Ende gehört in die Zeile 13. So wird auch die Sortierung und die Ausgabe 7 mal wiederholt :).

Chearius
 
H

HappyGast

Gast
Du hast mir den Abend gerettet :)
Das wär mir wohl nie aufgefallen.. Danke!!
 
H

HappyGast

Gast
Will ja nicht unverschämt sein, aber mir is grad noch ne Kleinigkeit aufgefallen...
Ich kann zwar die unsortierten und die sortierten Zahlen hintereinander ausgeben, aber gibt es auch einen Befehl damit die sortierten Zahlen in ner neuen Zeile also unter den unsortierten ausgegeben werden?
 

chearius

Mitglied
Einfach zwischen den Ausgaben folgendes schreiben:
Code:
System.out.println();
(Gibt eigentlich nur die Zeilenende aus) :)

Chearius
 
H

HappyGast

Gast
hm, da werden mir die sortierten Zahlen alle einzeln in jeweils ner neuen Zeile ausgegeben, hab mir das irgendwie anders gedacht
 

Bleiglanz

Gesperrter Benutzer
das Problem mit den doppelten hätte man auch einfacher lösen können
Code:
        List<Integer> all = new ArrayList<Integer>();
        int[] sel = new int[7];
        for(int i=0;i<49;i++) all.add(Integer.valueOf(i+1));
        Collections.shuffle(all);
        for(int i=0;i<7;i++) sel[i]=all.get(i).intValue();
        java.util.Arrays.sort(sel);
        System.out.println(java.util.Arrays.toString(sel));
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben