lotterie programm - ich bekomme es nicht hin

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hallo,

ich habe mit java noch etwas probleme..ich bezweifele, dass ich logisch denken kann^^
ich habe die aufgabe bekommen, ein lotterie programm zu erstellen, das 6 zufallszahlen zwischen 1 und 49 ausspuckt und ich habe auch einen lösungsweg, ich bekomme bloß kein vernünftiges programm zustande^^ aber der lösungsweg an sich ist richtig.

aaalso, ich habe ein array mit 49 stellen. diese array würde ungefähr so aussehen: 1 2 3 4 5.........47 48 49
dann gibt es noch die variablen zz1 und zz2, beides zufallszahlen nach (int) (math.random)*49+1

es sollen immer 2 stellen in dem array getauscht werden (zwischenzeitlich wird array im einer variable namens temp gespeichert)

500mal soll getauscht werden, damit alles gut durchgemischt ist. das array würde danach zB so aussehen: 34 23 5 7 23.....

jetzt sollen die ersten fünf stellen des array "gezogen" werden (also das wären ja insgesamt 6 zahlen^^)

ich hoffe, ich konnte das hier anschaulich genug erklären, hoffentlich kann mir jemand damit weiterhelfen. vielen dank schon mal im vorraus an alle, die sich die mühe machen :)

liebe grüße, kabbi
 

bambi

Bekanntes Mitglied
Also der Weg hoert sich ja schon gar nicht mal so schlecht an. Hast Du denn schon mal Code, den
Du hier posten kannst?
Ansonsten findest Du hier sicher im Forum auch noch einige andere Beispiele zu Lotterien. Die
kannst Du Dir ja mal ansehen, um eine Idee (!) zu bekommen - nicht abschreiben... :wink:
 

Wildcard

Top Contributor
Mal ein anderer gedanke:
-Nimm ein boolean array der länge 49.
-Bestimme eine Zufallszahl z von 0 - 49
- wenn array[z] false, setze array[z] auf true
- wiederhole bis du 6 Zahlen hast.

oooder:
-nimm ein 6stelliges int[]
-würfle 6 Zufallszahlen zwischen 1 und 49 aus und stell sicher das keine doppelt ist
[edit]tja, da war ich wohl zu spät :wink: [/edit]
 
G

Guest

Gast
tja, das problem ist ja, dass ich gerade diesen lösungsweg nehmen muss... undzwar genau den. es gibt noch ein paar andere, das weiß ich und einen davon muss ich später auch noch nehmen, aber erstmal soll ich den hier realisieren :(
 

mic_checker

Top Contributor
Poste doch einfach mal wo genau das Problem liegt.

1) Feld erzeugen welches 49 Elemente aufnehmen kann (1...49 - ohne 0)
2) Zwei Zufallszahlen generieren und die beiden Elemente des Arrays tauschen. Das ganze 500 mal.
3) Speichere die ersten 6 Elemente des Arrays in einem neuen.

EIgentlich alles relativ klar - habs eben auch nochmal programmiert und funzt einwandfrei.
Wie gesagt, im andern Thread wurden auch noch weitere Möglichkeiten gezeigt.

edit:
ok...wenn du es verwenden "musst"...ist aber nicht allzu schwer. Sag einfach wodran es hängt...
 
G

Guest

Gast
so sieht mein programm aus, es funzt nicht richtig, aber wo genau der fehler leigt weiß ich halt nicht :/
Code:
public class Lott1 {

  public static void main(final String[] args) {

  int [] lotto = new int [49];
  int zz1;
  int zz2;
  int temp=0;
  

  zz1 = (int)(Math.random()*49)+1;
  zz2 = (int)(Math.random()*49)+1;

  
  for(int a=0; a<500; a++) {
          for(int b=0; b<6; b++) {
          lotto[b]=temp;
          lotto[zz1]=lotto[b];
          temp=lotto[zz1];
          }
  System.out.println(lotto[0]+lotto[1]+lotto[2]+lotto[3]+lotto[4]+lotto[5]);
  }


  

  




  }
}
 

mic_checker

Top Contributor
Also, schau doch mal genau hin:

Dein ursprüngliches Array soll die Zahlen beinhalten:
1,2,3...48,49.

Wo weisst du den Array Elementen die Werte zu ? Gar nicht. Du belässt es dabei das sie standardmäßig mit 0 initialisiert werden, was nicht im Sinne des Erfinders ist.

Hier ein Tipp für den Anfang:

Code:
private static int[] zahlen = new int[49];
....
		for(int i = 0;i < zahlen.length;i++)
			zahlen[i] = i+1;

Noch was:

Code:
  zz1 = (int)(Math.random()*49)+1;
  zz2 = (int)(Math.random()*49)+1;

 
  for(int a=0; a<500; a++) {

Die Erzeugung der Zufallszahlen muss ebenfalls in die Schleife, da du ja 500 Zufallstauschungen willst.

Wofür das:

Code:
for(int b=0; b<6; b++) {

?

Du ersten 6 Zahlen willst du ja erst wenn alles gemischt wurde.
 

Bleiglanz

Gesperrter Benutzer
Code:
  zz1 = (int)(Math.random()*49)+1;
  zz2 = (int)(Math.random()*49)+1;
  for(int a=0; a<500; a++) { 

// MUSS IN DIE SCHLEIFE REIN! SONST SIND
// DIE WERTE JA IMMER DIE GLEICHEN!!

  for(int a=0; a<500; a++) { 
  zz1 = (int)(Math.random()*49)+1;
  zz2 = (int)(Math.random()*49)+1;
 
G

Guest

Gast
es klappt noch immer nicht...bin echt n bissl dumm bei sowas, ich weiß^^ da werden nur nullen ausgegeben
Code:
public class lottx {

  public static void main(final String[] args) {

  int [] lotto = new int [49];
  int zz1;
  int zz2;
  int temp=0;

  for(int i = 0;i < lotto.length;i++) {
   lotto[i] = i+1;
  }



  for(int a=0; a<500; a++) {

  zz1 = (int)(Math.random()*49)+1;
  zz2 = (int)(Math.random()*49)+1;

          for(int b=0; b<6; b++) {
          lotto[b]=temp;
          lotto[zz1]=lotto[b];
          temp=lotto[zz1];
          }
  System.out.println(lotto[0]+lotto[1]+lotto[2]+lotto[3]+lotto[4]+lotto[5]);
  }
  }
}
 
G

Guest

Gast
hier noch mal etwas umgemodelt...klappt aber immernoch nicht!
Code:
for(int a=0; a<49; a++) {

  zz1 = (int)(Math.random()*49)+1;
  zz2 = (int)(Math.random()*49)+1;

          for(int b=0; b<500; b++) {
          lotto[b]=temp;
          lotto[zz1]=lotto[b];
          temp=lotto[zz1];
          }

  }
  
  for(int c=1; c<6; c++ ) {
  System.out.println(lotto[c]);

  }
  }
}
 
B

Beni

Gast
Die Reihenfolge ist ein bisschen komisch.
Code:
lotto[b]=temp;
          lotto[zz1]=lotto[b];
          temp=lotto[zz1];

Zuerst musst du aus dem Array lesen und in temp speichern
Dann aus dem Array lesen und an der anderen Stelle im Array speichern
Dann temp lesen und im Array speichern.

Du weisst hier zuerstmal eine Stelle im Array temp zu (das noch 0 ist)...
 
G

Guest

Gast
ja, das war noch ein teilstück aus nemalten code...auweia :lol:
so hier sollte es klappen...tut es aber nicht
Code:
   for(int b=0; b<500; b++) {
          temp=lotto[zz1];
          lotto[zz1]=lotto[zz2];
          lotto[zz2]=temp];
 

mic_checker

Top Contributor
Code:
  	zz1 = (int)(Math.random()*48)+1;
  	zz2 = (int)(Math.random()*48)+1;
-> zz1 und zz2 maximal 48, da das Array 49 Elemente, keine 50!

Btw. änder deine Ausgabe:

Code:
System.out.println(lotto[0]+" "+lotto[1]+" "+lotto[2]+" "+lotto[3]+" "+lotto[4]+" "+lotto[5]);
 

mic_checker

Top Contributor
Hab hier noch mal den kompletten Code, dann muss man sich das nicht aus den verbesserten Sachen im Thread zusammensuchen:

Code:
import java.util.Random;

public class Lotto_Array {
	private static int[] zahlen = new int[49];
	private static int[] my_num = new int[6];
	
	public static void main(String[] args) {		
		int z1,z2,temp;
		Random rgen = new Random();
		
		for(int i = 0;i < zahlen.length;i++)
			zahlen[i] = i+1;
		
		for(int i = 0;i < 500;) {
			z1 = 1 + rgen.nextInt(48);
			z2 = 1 + rgen.nextInt(48);
			
			if(z1 != z2) {
				temp = zahlen[z1];
				zahlen[z1] = zahlen[z2];
				zahlen[z2] = temp;	
				i++;			
			}
		}
		
		for(int i = 0;i < 6;i++)
			my_num[i] = zahlen[i];
			
		for(int i = 0;i < 6;i++)
			System.out.println(my_num[i]);	
	}
}

Das Prog funzt minimal anders als deins, es speichert die Zahlen am Ende in einem extra-Array, musst natürlich nicht machen, habs jetzt einfach mal so gemacht.
Ausserdem werden bei den Tauschungen nur 500 tatsächliche Tauschungen vorgenommen (es kann ja sein das die beiden generierten Zahlen gleich sind und du somit gar nicht tauschst) - muss auch nicht unbedingt sein, aber ist ja nicht so dramatisch.
 
G

Guest

Gast
viiiilen dank^^ so, jetzt nur noch n struktogramm und ich habs hoffentlich geschafft.... menno, java kapiere ich aber glaube ich nie :(
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben