# lotterie programm - ich bekomme es nicht hin



## Guest (3. Mrz 2005)

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_


----------



## mic_checker (3. Mrz 2005)

erstmal was anderes: musst du es über diesen Lösungsweg lösen?

Hatten vor einiger Zeit schon mal was dazu:
http://www.java-forum.org/de/viewtopic.php?t=13722&highlight=lotto

Dort findest du einige Möglichkeiten das Problem "Lotterieziehung" zu lösen.

Ansonsten:
Poste doch mal deinen bisherigen Code zu deinem Ansatz. Dann können wir dir immer noch damit weiterhelfen.


----------



## bambi (3. Mrz 2005)

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 (3. Mrz 2005)

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]


----------



## Guest (3. Mrz 2005)

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 (3. Mrz 2005)

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


----------



## Guest (4. Mrz 2005)

so sieht mein programm aus, es funzt nicht richtig, aber wo genau der fehler leigt weiß ich halt nicht :/

```
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 (4. Mrz 2005)

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:


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

Noch was:



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



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

Wofür das:


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

?

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


----------



## Bleiglanz (4. Mrz 2005)

```
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;
```


----------



## Guest (4. Mrz 2005)

es klappt noch immer nicht...bin echt n bissl dumm bei sowas, ich weiß^^ da werden nur nullen ausgegeben

```
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]);
  }
  }
}
```


----------



## Guest (4. Mrz 2005)

hier noch mal etwas umgemodelt...klappt aber immernoch nicht!

```
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]);

  }
  }
}
```


----------



## Beni (4. Mrz 2005)

Die Reihenfolge ist ein bisschen komisch.

```
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)...


----------



## Guest (4. Mrz 2005)

ja, das war noch ein teilstück aus nemalten code...auweia :lol:  
so hier sollte es klappen...tut es aber nicht

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


----------



## mic_checker (4. Mrz 2005)

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


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


----------



## mic_checker (6. Mrz 2005)

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


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


----------



## Guest (7. Mrz 2005)

viiiilen dank^^ so, jetzt nur noch n struktogramm und ich habs hoffentlich geschafft.... menno, java kapiere ich aber glaube ich nie


----------

