Ein weiteres Lotto programm

1010

Mitglied
Hallo erstmal ist mein erster Beitrag hier im Java forum.
Ich hab dieses Semester mein Informatikstudium begonnen und wir programmieren jetzt mit Java. Ich hab noch nicht wirklich viel erfahrung, werde also in Zukunft hier ziemlich aktiv sein.
Soooo genug vorgestellt jetzt zu meinem Problem:

Ich, wie alle anderen hier, würde gerne reich werden. Also hab ich die einzig sinnvolle entscheidung getroffen und mit dem Lotto spielen angefangen 😉
Mein programm läuft auch eigentlich ganz gut. Nur bekomme ich ständig 0 raus. Hier mal meine letzte Ausgabe:

Code:
 23; 0; 13; 0; 36; 0; 2; 0; 1; 0;
 29; 0; 28; 0; 1; 0; 19; 0; 23; 0;
 41; 0; 45; 0; 4; 0; 35; 0; 31; 0;
 5; 0; 35; 0; 32; 0; 28; 0; 3; 0;
 13; 0; 18; 0; 16; 0; 20; 0; 7; 0;
 32; 0; 47; 0; 5; 0; 8; 0; 31; 0;
 22; 0; 30; 0; 35; 0; 39; 0; 20; 0;
 43; 0; 26; 0; 2; 0; 42; 0; 17; 0;
 27; 0; 15; 0; 7; 0; 46; 0; 24; 0;
 25; 0; 40; 0; 31; 0; 29; 0; 7; 0;


Ich bin mir durchaus darüber im klaren, dass man nur 6 zahlen ausgeben muss aber das ist ja alles kleinkram den ich später erledigen kann.

Kann mir hier irgendjemand sagen warum meine Zufallszahlen nun nicht wirklich zufällig erscheinen?

Hier ist der Code zum programm:

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

println("Wieviele Lottoscheine möchtest du ausfüllen? ");

int anzahl = readInt();

println("Die Zahlen die dich reich machen werden sind: ");


int feld[] =new int[10];
int i = 1;
while(i <= anzahl){ //anzahl der scheine
i++;
for(int j = 0; j<feld.length;j++){
feld[j] = (int)(49*Math.random()+1);
j++;
}
println("");

for (int f = 0 ; f<feld.length ; f++){
print(" "+feld[f]+";");
}

[/Java]
 
Hallo 1010, und willkommen im Forum! 🙂

Das Fehler bei deinem Programm liegt in deiner Handhabung der Variable j. Deine Schleife beginnt mit der Zeile
Code:
for(int j = 0; j<feld.length;j++)
, was ja bedeutet, das der Inhalt von j bei jedem Durchlauf um 1 erhöht werden soll (dafür sorgt das j++ als dritter Parameter). Gleichzeitig hast in dem Schleifenkörper auch nocheinmal explizit die Anweisung j++ geschrieben (Zeile 16). J wird also in jedem Schleifendurchlauf zweimal um 1 erhöht - einmal von der Schleife selber und ein zweites mal weil das so in dem Schleifenkörper steht. Das hat zur Folge das in deinen Arrays nur jedes zweite Feld mit einer Zufallszahl beschrieben wird und die restlichen Felder ihren initialen Wert von 0 beibehalten. Lass dir in der Schleife mal den Wert von j ausgeben, dann wirst du gleich sehen was da abläuft.
Und wenn du nun dank meiner Hilfe reich wirst - ich mag was abhaben! 😀
 
du erhoehst j und in die schleife tut dies auch....

EDIT: so wie die anderen das schon sagten....
 
oh danke. Ich hatte anfangs mit einer While-Schleife gearbeitet, daher kommt das überflüssige j++.

Ich werde noch eine funktion zur überprüfung einfügen und schauen, dass ich die Zahlen sortiert bekomme.Ich lese mich gerade in Quicksort ein...
 
Alles klar jetzt läuft das Ding schon besser. Vielen dank an euch drei.
Wenn ich reich werde lass ich was fürs Forum springen 😉
 
Mein Vorschlag, gibt die Zahlen sortiert aus, beachtet bereits gezogene Zahlen und kommt ohne Quicksort aus...
Java:
		Random random = new Random();
		for (int schein = 0; schein < 10; schein++) {
			boolean[] alreadyGezogen = new boolean[49];
			for (int kugel = 0; kugel < 6; kugel++) {
				int zahl = -1;
				do {
					zahl = random.nextInt(49);
				} while (alreadyGezogen[zahl]);
				alreadyGezogen[zahl] = true;
			}
			for (int zahl = 0; zahl < 49; zahl++) {
				if (alreadyGezogen[zahl])
					System.out.print(zahl + 1 + " ");

			}
			System.out.println();
		}

Ich will auch reich werden!:lol:
 

Zurück
Oben