Lotto Spiel

chk1102

Aktives Mitglied
Hallo Zusammen,

ich habe glücklicherweise bis auf eine Kleinigkeit alles zum laufen bekommen.
Ich möchte gern die Treffer der Eingabe zählen für die richtig getippten Zahlen.

Was mach ich falsch??
steht ganz unten..???:L???:L

Java:
public class P06_3_nocheinLottospiel {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int ran;
		int zs = 0;
		int treffer1 = 0;

		int lotto[][] = new int[3][7];
		for (int i = 0; i < lotto[0].length; i++) {
			lotto[0][i] = (int) (Math.random() * 49 + 1);
			zs = lotto[0][6];
			for(int j = 0; j<i; j++) {
					if (lotto[0][j] == lotto[0][i]) {
						i--;
					}
			}
		}
	
		System.out.println("Die Lottozahlen von Samstag: "+ Arrays.toString(lotto[0]));		


		System.out.println("Bitte gib 2x 6 Lottozahlen und eine Zusatzzahl ein:");

		System.out.println("1. Spielfeld");
		for (int i = 0; i < lotto[1].length; i++) {
			lotto[1][i] = EAM.rInt();
		}
		System.out.println("2. Spielfeld");
		for (int i = 0; i < lotto[2].length; i++) {
			lotto[2][i] = EAM.rInt();
		}
		System.out.println("Spieler hat getippt: " + Arrays.toString(lotto[1]) + Arrays.toString(lotto[2]));

		for ( int i = 0; i<lotto.length; i++){
			treffer1 = 0;
			for (int j = 0; j<lotto[i].length; j++) {
				if (lotto[0][j] == lotto[1][j]){
				treffer1++;
				}
				if (lotto[0][j] == lotto[2][j]){
					treffer1++;
					}
			}
		}	
		for ( int i = 0; i<lotto.length; i++){
			treffer1 = 0;
			for (int j = 0; j<lotto[i].length; j++) {
				if (lotto[0][j] == lotto[1][j]){
				treffer1++;
				}
				if (lotto[0][j] == lotto[2][j]){
					treffer1++;
					}
			}
		}	
		
		System.out.println("Die Lottozahlen von Samstag: "+ Arrays.toString(lotto[0]));		
		System.out.println("Die ZS lautet: " + zs);

		System.out.println("Treffer im 1. Feld " + treffer1 );

	}

}
 
Zeile 39-49 und 50-60 sind gleich?
passt "Treffer im 1. Feld" dazu, dass beide lotto-Arrays durchsucht werden? und zwar in jeden der beiden zuvor angesprochenen Blöcke

ein Hauptfehler dürfte aber sein, dass in der Schleife ziemlich oft
> treffer1 = 0;
steht..
so kommt man ja nicht mit dem Zählen voran, gehe zurück auf Los..

-------

generell wäre es sinnvoll, deine Zahlen anzugeben/ im Programm gar die Eingaben herauszuscheiden und alle Test-Werte fest zu kodieren,
wer soll sich ein passendes Beispiel ausdenken und auch noch eintippen?

nenne dazu die falsche Zählung und das deiner Meinung nach richtige Ergebnis
 
Zuletzt bearbeitet von einem Moderator:
Code:
lotto[0][i] = (int) (Math.random() * 49 + 1);
-> besser:
Code:
lotto[0][i] = (int) (Math.random() * 49.0) + 1;

Das bedeutet nur ein cast anstatt 3 casts

Code:
treffer1 = 0;
-> überflüssig...

Gehe für jedes Element aus lotto[0] alle Elemente aus lotto[1] und lotto[2] durch...
 
OK, hab die Syso eingebaut.
Folgende Ausgabe hab ich nun:
Die Lottozahlen von Samstag: [38, 3, 23, 49, 24, 17, 5]
Bitte gib 2x 6 Lottozahlen und eine Zusatzzahl ein:
1. Spielfeld
49
2
3
6
7
8
9
2. Spielfeld
17
2
10
11
12
13
15
Spieler hat getippt: [49, 2, 3, 6, 7, 8, 9][17, 2, 10, 11, 12, 13, 15]
Die Lottozahlen von Samstag: [38, 3, 23, 49, 24, 17, 5]
Die ZS lautet: 5
Treffer im 1. Feld 0 und im 2. Feld: 0


Ich hab nun extra mal die Zahlen nicht der Reihenfolge nach wie die gezogenen Zahlen ausgegeben wurden eingegeben. Bedeutet es, dass ich die Arrays sortieren muss?
 
dass
> treffer1 = 0;
schlecht ist usw. schon berücksichtigt?

Java:
        lotto[0] = new int[]
            {38, 3, 23, 49, 24, 17, 5};
        lotto[1] = new int[]
            {49, 2, 3, 6, 7, 8, 9};
        lotto[2] = new int[]
            {17, 2, 10, 11, 12, 13, 15};
erspart dir übrigens die Eingabe-Orgien und das Warten auf genau die gleichen Zufallszahlen,
das kann dauern.., wobei man auch ein Random-Objekt mit festen Seed vorgeben kann für reproduzierbare Zahlenreihen

die Schleifen sind noch falsch, stimmt,
besser in Richtung:
Java:
        for (int i = 0; i < lotto[0].length; i++)
        {
            for (int j = 0; j < lotto[1].length; j++)
            {
                if (lotto[0][i] == lotto[1][j])
usw.
 
Danke Slater.
Ja das treffer1 hab ich entfernt 🙂

So wie ich mir das vorstelle klappt das scheinbar einfach nicht :autsch:
Ich habe die Lösung für das Spiel in anderer Form mit nem Array. Und zwar gibts ein Array, dass die getippten Lottozahlen auf 1 setzt im entsprechenden Index, andernfalls 0 wenn nicht getippt oder 2, wenns die Zusatzzahl ist.

Allerdings ist es das was ich genau nicht möchte.
Ich möchte einfach die Inhalte mit 3 Lottoreihen (1x Random Lottozahlen, 2x Usereingaben) miteinander vergleichen.
Ich hab von der Methode gelesen Arrays.deepequals()...aber ich glaub das war nur für Objekte.

Welchen Algorithmus muss ich schreiben, den ich immer anwenden kann, für einfache und mehrdimensionale Arrays??
Ich frage für diese Arrays leider immer wieder nach, weil mich das in meiner Prüfung erwartet. Also einfache Arrays in methoden über mehrere Klassen hinweg nutzen, auswerten... 🙁
Das muss ich im Schlaf können.

Es tut mir leid, wenn ich euch damit penetriere, aber ich MUSS das auf die Kette kriegen..
Ich weiß jedes Programm kann man in x-beliebigerweise schreiben, aber ich brauche etwas woran ich mich orientieren kann. So als lernte man eine Definition für eine Sache :rtfm: Das muss es doch geben...
 
was hier falsch ist und wie es besser geht, habe ich geschrieben,
wenn noch nicht klar, dann nachfragen

was darüber hinaus die Frage ist kann ich nur aus
> Welchen Algorithmus muss ich schreiben, den ich immer anwenden kann, für einfache und mehrdimensionale Arrays??
nicht erkennen
 
Sieht alles ein bisschen unübersichtlich aus, weil lotto ein mehrdimensionales Array is, aber:

Java:
        int lotto[][] = new int[3][7];

        for (int i = 0; i < lotto[0].length; i++) {
            lotto[0][i] = (int) (Math.random() * 49d) + 1;
        }

        Scanner sc = new Scanner(System.in);

        for (int i = 1; i < lotto.length; i++) {
            for (int j = 0; j < lotto[i].length; j++) {
                System.out.printf("Zahl %d/%d eingeben: ", i, j + 1);
                lotto[i][j] = sc.nextInt();
            }
        }

        for (int i = 0; i < lotto.length; i++) {
            Arrays.sort(lotto[i]);
            System.out.println(Arrays.toString(lotto[i]));
        }

        int treffer = 0;

        for (int i = 0; i < lotto[0].length; i++) {
            for (int j = 1; j < lotto.length; j++) {
                for (int k = 0; k < lotto[j].length; k++) {
                    if (lotto[0][i] == lotto[j][k]) {
                        treffer++;
                        break;
                    }
                }
            }
        }

        System.out.println("treffer = " + treffer);

Code:
Zahl 1/1 eingeben: 1
Zahl 1/2 eingeben: 2
Zahl 1/3 eingeben: 3
Zahl 1/4 eingeben: 4
Zahl 1/5 eingeben: 5
Zahl 1/6 eingeben: 6
Zahl 1/7 eingeben: 7
Zahl 2/1 eingeben: 14
Zahl 2/2 eingeben: 13
Zahl 2/3 eingeben: 12
Zahl 2/4 eingeben: 11
Zahl 2/5 eingeben: 10
Zahl 2/6 eingeben: 9
Zahl 2/7 eingeben: 8
[1, 9, 12, 30, 33, 42, 48]
[1, 2, 3, 4, 5, 6, 7]
[8, 9, 10, 11, 12, 13, 14]
treffer = 3

Edit: Dabei ist aber eben noch nicht berücksichtigt, dass man gleiche Zahlen nicht mehrfach eingeben darf und dass sie auch nicht mehrfach gezogen werden dürfen
 
Zuletzt bearbeitet von einem Moderator:
Vielleicht würde ich das so machen:
Java:
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class LottozahlenSet {

    private Set<Integer> zahlen;

    public LottozahlenSet() {
        Random r = new Random();
        zahlen = new HashSet<Integer>();
        while (zahlen.size() < 7) {
            zahlen.add(r.nextInt(49) + 1);
        }
    }

    public LottozahlenSet(Set<Integer> zahlen) {
        if (!istKorrekt(zahlen)) {
            throw new IllegalArgumentException();
        }
        this.zahlen = zahlen;
    }

    public int richtige(LottozahlenSet l) {
        int richtige = 0;
        for (int i : zahlen) {
            if (l.zahlen.contains(i)) {
                richtige++;
            }
        }
        return richtige;
    }

    private boolean istKorrekt(Set<Integer> zahlen) {
        if (zahlen == null || zahlen.size() != 7) {
            return false;
        }
        for (int i : zahlen) {
            if (i < 1 || i > 49) {
                return false;
            }
        }
        return true;
    }

    @Override
    public String toString() {
        return "LottozahlenSet{" + "zahlen=" + zahlen + '}';
    }
}
Java:
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        HashSet<Integer> zahlen = new HashSet<Integer>();
        while (zahlen.size() < 7) {
            System.out.print(zahlen.size() + 1 + ". Zahl eingeben: ");
            zahlen.add(s.nextInt());
        }
        
        LottozahlenSet tipp = new LottozahlenSet(zahlen);
        System.out.println("tipp = " + tipp);
        
        LottozahlenSet ziehung = new LottozahlenSet();
        System.out.println("ziehung = " + ziehung);
        
        System.out.println("richtige = " + ziehung.richtige(tipp));
    }
Code:
1. Zahl eingeben: 7
2. Zahl eingeben: 6
3. Zahl eingeben: 5
4. Zahl eingeben: 4
5. Zahl eingeben: 3
6. Zahl eingeben: 2
7. Zahl eingeben: 1
tipp = LottozahlenSet{zahlen=[1, 2, 3, 4, 5, 6, 7]}
ziehung = LottozahlenSet{zahlen=[16, 7, 8, 24, 29, 46, 30]}
richtige = 1
Die Bezeichner verwirren aber auch etwas.
Ist das Thema noch aktuell?
 
Hallo Zusammen,

ich habe mich nun nach ein paar Tagen Pause wieder dran gemacht.
Ich hab mich in der Zwischenzeit damit "angefreundet" das Array umzustruktieren.
Habe nun wieder 2 mehrdimensionale Arrays eingebaut und dann einfach in dem Lotto Array je nach Zufallszahl den Index auf 1 gesetzt bzw 2 bei Zufallszahl.

Soweit funktioniert es.
Aber leider nich wie ich will.

Java:
package Proggen1_2;

import java.util.Arrays;

public class Lottozahlen_3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int lotto[] []= new int[3][49];
		int ran;
		int ziehung[][] = new int[3][7];
		int zs = 0;
		int treffer1 = 0;
		int treffer2 = 0;
		int sp1, sp2;
		ziehung[0] = new int [] {2, 9, 3, 12,11,14, 48};
		ziehung[1] = new int[]
		                   {49, 2, 3, 6, 7, 8, 9};
		ziehung[2] = new int[]
		                   {17, 2, 10, 11, 12, 13, 15};


		//Lotto array in Zeile 0 mit 0 befüllen
		for (int i = 1; i < lotto.length; i++) {
			for (int j =0; j<lotto[i].length; j++) {
			lotto[i][j] = 0;
		}
		}

		/*
		//Array Ziehung mit 7 Zufallszahlen füllen
		for (int i = 0; i < ziehung[0].length; i++) {
			ran = (int) (Math.random() * 49 + 1);
			ziehung[0][i] = ran;
			for (int j = 0; j < i; j++) {
				if (ziehung[0][j] == ziehung[0][i]) {
					i--;
				}
				
			}
		}*/
		//System.out.println("Array Ziehung: " + Arrays.toString(ziehung[0]));

		for (int i = 0; i<ziehung[0].length; i++) {
			if((i+1)<=6)
			lotto[0][ziehung[0][i] -1] = 1;
			else 
			lotto[0][ziehung[0][i] -1] = 2;
			if ( (i+1) >=6) 
				zs= ziehung[0][i];
		}
		for (int i = 0; i<ziehung[1].length; i++) {
			if((i+1)<=6)
			lotto[1][ziehung[1][i] -1] = 1;
			else 
			lotto[1][ziehung[1][i] -1] = 2;
			if ( (i+1) >=6) 
				zs= ziehung[1][i];
		}
		for (int i = 0; i<ziehung[2].length; i++) {
			if((i+1)<=6)
			lotto[2][ziehung[2][i] -1] = 1;
			else 
			lotto[2][ziehung[2][i] -1] = 2;
			if ( (i+1) >=6) 
				zs= ziehung[2][i];
		}
		
		Arrays.sort(ziehung[0]);
		Arrays.sort(ziehung[1]);
		Arrays.sort(ziehung[2]);

		
		System.out.println("Array lotto: " + Arrays.toString(lotto[0]));
		System.out.println("Array lotto: " + Arrays.toString(lotto[1]));
		System.out.println("Array lotto: " + Arrays.toString(lotto[2]));
		//System.out.println("Die ZS lautet: " + zs);
		System.out.println("Die Lottozahlen von Samstag: " +  Arrays.toString(ziehung[0]));
		System.out.println("Die ZS lautet: " + zs);
		/*
		System.out.println("Bitte gib als 1. Spieler 6 Lottozahlen und eine Zusatzzahl ein:");

		for (int i = 0; i < lotto[1].length; i++) {
			lotto[1][i] = EAM.rInt();
		}
		System.out.println("Spieler 1: " + Arrays.toString(lotto[1]));

		System.out
				.println("Bitte gib als 2. Spieler 6 Lottozahlen und eine Zusatzzahl ein:");

		for (int i = 0; i < lotto[2].length; i++) {
			lotto[2][i] = EAM.rInt();
		}
		System.out.println("Spieler 1: " + Arrays.toString(lotto[2]));
		*/
		System.out.println("Spieler 1: " + Arrays.toString(ziehung[1]));
		System.out.println("Spieler 1: " + Arrays.toString(ziehung[2]));
		for ( int i = 0; i<lotto.length; i++){
			if (lotto[0][i] == 1 && lotto[1][i] == 1){
				treffer1++;
			}
			if(lotto[0][i] == 1 && lotto[2][i] == 1) {
				treffer2++;
			}
			if(lotto[1][i] == 2) System.out.println("Treffer bei der ZS!");
			if(lotto[2][i] == 2) System.out.println("Treffer bei der ZS!");
		}
		System.out.println("Spieler 1 hat " + treffer1 +  " treffer");
		System.out.println("Spieler 2 hat " + treffer2 + " treffer");

	}

}

Irgendwie irgendwo mache ich einen Fehler bei der Zusatzzahl des Array lotto[0]. Die Zusatzzahl ist nicht die die ich eingetragen habe (48) sondern es kommt die Zahl 15 aus lotto[2].

Zusätzlich rechnet das Prog die Treffer nicht korrekt hoch.
Treffer beider Spielfelder müssten 3 Stk sein.
Hier mal die Ausgabe:

Array lotto: [0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0]
Array lotto: [0, 1, 1, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
Array lotto: [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Die Lottozahlen von Samstag: [2, 3, 9, 11, 12, 14, 48]
Die ZS lautet: 15
Spieler 1: [2, 3, 6, 7, 8, 9, 49]
Spieler 1: [2, 10, 11, 12, 13, 15, 17]
Spieler 1 hat 2 treffer
Spieler 2 hat 1 treffer

Vielen Dank für die weiteren Anregungen mit Hashmaps usw 🙂
Leider darf das Prog nur aus Arrays bestehen 😉
Aber danke trotzdem 😀
 
Ah wie geil!!
Ich habs mit den Treffern gefunden 😀😀😀😀 :toll::applaus:

Hab die Berechnung wie folgt geändert:
Java:
for ( int i = 0; i<lotto[0].length; i++){
			if (lotto[0][i] == 1 && lotto[1][i] == 1){
				treffer1++;
			}
			if(lotto[0][i] == 1 && lotto[2][i] == 1) {
				treffer2++;
			}
			if(lotto[1][i] == 2) System.out.println("Treffer bei der ZS!");
			if(lotto[2][i] == 2) System.out.println("Treffer bei der ZS!");
		}

also in der for-Schleife anstatt for (int i = 0; i<lotto.length,...) jetzt i<lotto[0].length...

Bleibt nur noch Frage 1offen. Und zwar warum ich die Zusatzzahl des letzten Arrays, die ja eigentlich eine Benutzereingabe darstellen soll, übertragen wird, anstatt aus der 1. Reihe des Arrays lotto[0] ??
 
:toll:

Trefferproblem auch beseitig 😀

Java:
package Proggen1_2;

import java.util.Arrays;

public class Lottozahlen_3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int lotto[] []= new int[3][49];
		int ran;
		int ziehung[][] = new int[3][7];
		int zs = 0;
		int treffer1 = 0;
		int treffer2 = 0;
		int sp1, sp2;
		/*
		ziehung[0] = new int [] {2, 9, 3, 12,11,14, 48};
		ziehung[1] = new int[]
		                   {49, 2, 3, 6, 7, 8, 9};
		ziehung[2] = new int[]
		                   {17, 21, 10, 11, 12, 13, 15};
	*/

		//Lotto array in Zeile 0 mit 0 befüllen
		for (int i = 1; i < lotto.length; i++) {
			for (int j =0; j<lotto[i].length; j++) {
			lotto[i][j] = 0;
		}
		}

		
		//Array Ziehung mit 7 Zufallszahlen füllen
		for (int i = 0; i < ziehung[0].length; i++) {
			ran = (int) (Math.random() * 49 + 1);
			ziehung[0][i] = ran;
			for (int j = 0; j < i; j++) {
				if (ziehung[0][j] == ziehung[0][i]) {
					i--;
				}
				
			}
		}
		System.out.println("Array Ziehung: " + Arrays.toString(ziehung[0]));
		Arrays.sort(ziehung[0]);
		
		for (int i = 0; i<ziehung[0].length; i++) {
			if((i+1)<=6)
			lotto[0][ziehung[0][i] -1] = 1;
			else 
			lotto[0][ziehung[0][i] -1] = 2;
			if ( (i+1) >=6) 
				zs= ziehung[0][i];
		}
		System.out.println("Die ZS lautet: " + zs);
		System.out.println("Bitte gib als 1. Spieler 6 Lottozahlen und eine Zusatzzahl ein:");

		for (int i = 0; i < 7; i++) {
			ziehung[1][i] = EAM.rInt();
		}
		System.out.println("Spieler 1: " + Arrays.toString(ziehung[1]));

		System.out
				.println("Bitte gib als 2. Spieler 6 Lottozahlen und eine Zusatzzahl ein:");

		for (int i = 0; i < 7; i++) {
			ziehung[2][i] = EAM.rInt();
		}
		System.out.println("Spieler 1: " + Arrays.toString(ziehung[1]));
		System.out.println("Spieler 1: " + Arrays.toString(ziehung[2]));

		for (int i = 0; i<ziehung[1].length; i++) {
			if((i+1)<=6)
			lotto[1][ziehung[1][i] -1] = 1;
			else 
			lotto[1][ziehung[1][i] -1] = 2;

		}
		for (int i = 0; i<ziehung[2].length; i++) {
			if((i+1)<=6)
			lotto[2][ziehung[2][i] -1] = 1;
			else 
			lotto[2][ziehung[2][i] -1] = 2;

		}

	
		Arrays.sort(ziehung[1]);
		Arrays.sort(ziehung[2]);
		System.out.println("Array lotto: " + Arrays.toString(lotto[0]));
		System.out.println("Array lotto: " + Arrays.toString(lotto[1]));
		System.out.println("Array lotto: " + Arrays.toString(lotto[2]));
		System.out.println("Die Lottozahlen von Samstag: " +  Arrays.toString(ziehung[0]));
		System.out.println("Die ZS lautet: " + zs);
		
		
		for ( int i = 0; i<lotto[0].length; i++){
			if (lotto[0][i] == 1 && lotto[1][i] == 1){
				treffer1++;
			}
			if(lotto[0][i] == 1 && lotto[2][i] == 1) {
				treffer2++;
			}
			if(lotto[0][i]== 2 && lotto[1][i] == 2) System.out.println("Treffer bei der ZS!");
			if(lotto[0][i] == 2 && lotto[2][i] == 2) System.out.println("Treffer bei der ZS!");
		}
		System.out.println("Spieler 1 hat " + treffer1 +  " treffer");
		System.out.println("Spieler 2 hat " + treffer2 + " treffer");

	}

}

Bleibt nun doch eine letzte Frage übrig: Wieso gibt er mir nicht aus, dass ich die Zusatzzahl richtig habe, wenn ich sie eingetippt habe?
Das funktioniert leider nicht,..

:rtfm:

Danke 🙂
 
ich habe dir vorgemacht wie man die Zahlen fest vorgibt, aber du verzichtest weiter darauf..

damit du daraus lernst hebe ich mir meine Antwort nun auf, bis du ein Programm mit vollständiger Vorgabe aller Zahlen
(Eingabe + Zufall auskommentieren) postest + Nennung der gewünschen Ergebnisse
 
Beschäftige dich bitte mal mit Java OOP, dein Programm ist nicht gut gelöst/unübersichtlich.

- Wo wird den eine Eingabe der Zusatzzahl erwartet?
- Wo ist die Klasse "EAM"?
- Wo vergleichst du den die Zusatzzahl?

Java:
if(lotto[0][i]== 2 && lotto[1][i] == 2) System.out.println("Treffer bei der ZS!");
if(lotto[0][i] == 2 && lotto[2][i] == 2) System.out.println("Treffer bei der ZS!");

Ist die eingegeben Zusatzzahl überhaupt 2? (Post #6 von SlaterB)
 
Zuletzt bearbeitet:
die 2 ist hier nur eine Markierung,
in Zwischenschritten werden Treffer als 1, Zusatzzahl als 2 eingetrangen, sonst enthalten diese Arrays hier nur 0
 
Mal eine Frage. Dürft ihr auch ein boolean[] verwenden? Wenn ja, dann ließe sich maximale Effizienz erreichen 😀
 
Also hier mal mein Vorschlag mit einem boolean[] und ohne OOP (sehr unübersichtlich):

Java:
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Wie viele Spieler? ");
        final int spieler = sc.nextInt();
        System.out.print("Wie viele KI-Spieler? ");
        final int kis____ = sc.nextInt();

        boolean[][] ar = new boolean[spieler + kis____ + 1][50];
        for (int i = 0; i < spieler; i++) {
            for (int j = 0; j < 7; j++) {
                System.out.printf("Spieler %d, Zahl %d: ", i + 1, j + 1);
                int k = sc.nextInt();
                if (ar[i][k]) {
                    j--;
                } else {
                    ar[i][k] = true;
                }
            }
        }
        Random ra = new Random();
        for (int i = spieler; i < spieler + kis____; i++) {
            for (int j = 0; j < 7; j++) {
                int k = ra.nextInt(49) + 1;
                if (ar[i][k]) {
                    j--;
                } else {
                    ar[i][k] = true;
                }
            }
            System.out.printf("KI-Spieler %d wählt: %s%n", i - spieler + 1, arToString(ar[i]));
        }
        for (int i = 0; i < 7; i++) {
            int k = ra.nextInt(49) + 1;
            if (ar[spieler + kis____][k]) {
                i--;
            } else {
                ar[spieler + kis____][k] = true;
            }
        }
        System.out.printf("Die Ziehung lautet: %s%n", arToString(ar[spieler + kis____]));

        for (int i = 0; i < spieler; i++) {
            int j = 0;
            for (int k = 1; k < ar[i].length; k++) {
                if (ar[i][k] && ar[spieler + kis____][k]) {
                    j++;
                }
            }
            System.out.printf("Spieler %d hat %d richtige%n", i + 1, j);
        }
        for (int i = spieler; i < spieler + kis____; i++) {
            int j = 0;
            for (int k = 1; k < ar[i].length; k++) {
                if (ar[i][k] && ar[spieler + kis____][k]) {
                    j++;
                }
            }
            System.out.printf("KI-Spieler %d hat %d richtige%n", i - spieler + 1, j);
        }
    }

    private static String arToString(boolean[] ar) {
        StringBuilder b = new StringBuilder(7 * 4);
        for (int i = 1; i < ar.length; i++) {
            if (ar[i]) {
                b.append(i);
                b.append(", ");
            }
        }
        b.delete(b.length() - 2, b.length());
        return b.toString();
    }

Code:
Wie viele Spieler? 2
Wie viele KI-Spieler? 4
Spieler 1, Zahl 1: 1
Spieler 1, Zahl 2: 2
Spieler 1, Zahl 3: 3
Spieler 1, Zahl 4: 4
Spieler 1, Zahl 5: 5
Spieler 1, Zahl 6: 6
Spieler 1, Zahl 7: 7
Spieler 2, Zahl 1: 8
Spieler 2, Zahl 2: 9
Spieler 2, Zahl 3: 10
Spieler 2, Zahl 4: 11
Spieler 2, Zahl 5: 12
Spieler 2, Zahl 6: 13
Spieler 2, Zahl 7: 14
KI-Spieler 1 wählt: 1, 19, 25, 35, 37, 43, 49
KI-Spieler 2 wählt: 5, 15, 17, 20, 21, 44, 48
KI-Spieler 3 wählt: 9, 20, 26, 29, 38, 42, 48
KI-Spieler 4 wählt: 6, 12, 14, 15, 34, 40, 44
Die Ziehung lautet: 6, 21, 26, 35, 37, 38, 49
Spieler 1 hat 1 richtige
Spieler 2 hat 0 richtige
KI-Spieler 1 hat 3 richtige
KI-Spieler 2 hat 1 richtige
KI-Spieler 3 hat 2 richtige
KI-Spieler 4 hat 1 richtige

Ab Zeile 9 werden die einzelnen Spieler nach ihren Zahlen gefragt,
ab Zeile 20 wählen die KI-Spieler ihre Zahlen,
ab Zeile 32 werden die Zahlen gezogen,
ab Zeile 42 wird geprüft, wie viele richtige die Spieler haben,
ab Zeile 51 wird geprüft, wie viele richtige die KI-Spieler haben.

Man sieht aber jetzt schon, dass durch die vielen Indices (i, j, k...) viel Übersichtlichkeit verloren geht. Das ließe sich ganz einfach durch OOP vermeiden. Außerdem ist es möglich, dass eine AIOOB exception geworfen wird, oder 0 gewählt werden kann

PS: Über ein "Danke" wäre ich wiedermal dankbar 😀
 
Hallo,

@Slater: ist nun wieder auskommentiert
Java:
package Proggen1_2;

import java.util.Arrays;

public class Lottozahlen_3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int lotto[] []= new int[3][49];
		int ran;
		int ziehung[][] = new int[3][7];
		int zs = 0;
		int treffer1 = 0;
		int treffer2 = 0;
		int sp1, sp2;
		
		ziehung[0] = new int [] {2, 9, 3, 12,11,14, 48};
		ziehung[1] = new int[]
		                   {49, 2, 3, 6, 7, 8, 9};
		ziehung[2] = new int[]
		                   {17, 21, 10, 11, 12, 13, 15};

		//Lotto array in Zeile 0 mit 0 befüllen
		for (int i = 1; i < lotto.length; i++) {
			for (int j =0; j<lotto[i].length; j++) {
			lotto[i][j] = 0;
		}
		}

		
		System.out.println("Spieler 1: " + Arrays.toString(ziehung[1]));
		System.out.println("Spieler 1: " + Arrays.toString(ziehung[2]));

		for (int i = 0; i<ziehung[1].length; i++) {
			if((i+1)<=6)
			lotto[1][ziehung[1][i] -1] = 1;
			else 
			lotto[1][ziehung[1][i] -1] = 2;

		}
		for (int i = 0; i<ziehung[2].length; i++) {
			if((i+1)<=6)
			lotto[2][ziehung[2][i] -1] = 1;
			else 
			lotto[2][ziehung[2][i] -1] = 2;

		}

	
		Arrays.sort(ziehung[1]);
		Arrays.sort(ziehung[2]);
		System.out.println("Array lotto: " + Arrays.toString(lotto[0]));
		System.out.println("Array lotto: " + Arrays.toString(lotto[1]));
		System.out.println("Array lotto: " + Arrays.toString(lotto[2]));
		System.out.println("Die Lottozahlen von Samstag: " +  Arrays.toString(ziehung[0]));
		System.out.println("Die ZS lautet: " + zs);
		
		
		for ( int i = 0; i<lotto[0].length; i++){
			if (lotto[0][i] == 1 && lotto[1][i] == 1){
				treffer1++;
			}
			if(lotto[0][i] == 1 && lotto[2][i] == 1) {
				treffer2++;
			}
			if(lotto[0][i]== 2 && lotto[1][i] == 2) System.out.println("Treffer bei der ZS!");
			if(lotto[0][i] == 2 && lotto[2][i] == 2) System.out.println("Treffer bei der ZS!");
		}
		System.out.println("Spieler 1 hat " + treffer1 +  " treffer");
		System.out.println("Spieler 2 hat " + treffer2 + " treffer");

	}

}

Ausgabe:

Array Ziehung: [2, 9, 3, 12, 11, 14, 48]
Die ZS lautet: 48
Spieler 1: [49, 2, 3, 6, 7, 8, 9]
Spieler 1: [17, 21, 10, 11, 12, 13, 15]
Array lotto: [0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0]
Array lotto: [0, 1, 1, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
Array lotto: [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 2, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Die Lottozahlen von Samstag: [2, 3, 9, 11, 12, 14, 48]
Die ZS lautet: 48
Spieler 1 hat 2 treffer
Spieler 2 hat 2 treffer


Gewünscht ist:
Spieler hat im 1. Feld dieses Bsps. 3 treffer: 2,3,9 u die ZS 48
Im 2. Feld müsste er ausgeben: 2 treffer: 11,12

Jetzt vergleich ich schon auf 1 und 2 mit den IF-Abfragen und durchlaufe alle Inhalte des Arrays und klappt doch nicht 🙁

Zu den anderen Fragen:
@Plopo:
- Wo wird den eine Eingabe der Zusatzzahl erwartet?
- Wo ist die Klasse "EAM"?
- Wo vergleichst du den die Zusatzzahl?
Zu Frage 1: Ich bestimmte einfach die generell die letzte Zahl als Zusatzzahl.
Java:
for (int i = 0; i<ziehung[0].length; i++) {
			if((i+1)<=6)
			lotto[0][ziehung[0][i] -1] = 1;
			else 
			lotto[0][ziehung[0][i] -1] = 2;
			if ( (i+1) >=6) 
				zs= ziehung[0][i];
		}
und auch hier:
Java:
	for (int i = 0; i < 7; i++) {
			ziehung[1][i] = EAM.rInt();
		}

Zu Frage 2:
Die Klasse EAM ist von einer Prof. geschrieben worden und befindet sich im Package. Die Ein- und Ausgaben über IO kommen erst im nächsten Modul des Fachs Programmieren 2.

Zu Frage 3:
Ich dachte eigentlich in den letzten beiden IF-Abfragen:
Java:
for ( int i = 0; i<lotto[0].length; i++){
			if (lotto[0][i] == 1 && lotto[1][i] == 1){
				treffer1++;
			}
			if(lotto[0][i] == 1 && lotto[2][i] == 1) {
				treffer2++;
			}
			if(lotto[0][i]== 2 && lotto[1][i] == 2) System.out.println("Treffer bei der ZS!");
			if(lotto[0][i] == 2 && lotto[2][i] == 2) System.out.println("Treffer bei der ZS!");
		}

Ist die eingegeben Zusatzzahl überhaupt 2? (Post #6 von SlaterB)
Jab. 48 ist in diesem Fall die ZS. Das passt.


@hüteüberhüte:
Dürft ihr auch ein boolean[] verwenden?
Jab dürfen wir. Alles was man mit diesen Arrays veranstalten kann.
In deinem Vorschlag hast du aber auch i, j und k´s verwendet..?
 
Ausgabe:

Array Ziehung: [2, 9, 3, 12, 11, 14, 48]
Die ZS lautet: 48
Spieler 1: [49, 2, 3, 6, 7, 8, 9]
Spieler 1: [17, 21, 10, 11, 12, 13, 15]
[..]
Gewünscht ist:
Spieler hat im 1. Feld dieses Bsps. 3 treffer: 2,3,9 u die ZS 48
Im 2. Feld müsste er ausgeben: 2 treffer: 11,12

die angebliche Ausgabe passt überhaupt nicht zum Code,
die Zeilen, die die Superzahl 'bestimmen', also Variable zs, sind gar nicht mehr dabei

außerdem inhaltlich unpassend: Spieler 1 tippt doch 49 und nicht 48..

das eigentliche Problem aber lautet: du vergleichst nur den letzten Tipp mit der Zusatzzahl,
ist vielleicht auch nicht schlecht, je nachdem wie das System ist,
tippt man einfach 7 beliebige Zahlen oder 6 + Zusatzzahl am Ende?
deswegen wollte ich von dir ein konkretes Beispiel..,

steht jedenfalls die Zusatzzahl am Anfang im Spieler-Array, gehts nicht, es wird positionsgenau verglichen,
andersrum wird auch die 9 auf der letzten Position im Moment nicht als Treffer erkannt, da steht ja ne 2, im Array der Ziehung eine 1

wie man es besser machen könnte wäre natürlich gleich interessant, aber da kann man ja dein ganzes Programm einstampfen,
zumindest wieder weg von 1 und 2 und zu
Java:
        for (int i = 0; i < lotto[0].length; i++)
        {
            for (int j = 0; j < lotto[1].length; j++)
            {
                if (lotto[0][i] == lotto[1][j])

ich habe die mehrfachen Postings zwischendurch nicht alle gelesen, gibt es unumstößliche gute Gründe für 1 und 2?
 
tippt man einfach 7 beliebige Zahlen oder 6 + Zusatzzahl am Ende?
Im Prinzip ist ja gleich. So oder so müssen insgesamt 7 Zahlen eingegeben werden, von den 6 für das generelle Lottospiel verwendet und die letzte als Zusatzzahl werden sollen.

DU hast recht. Habe das Array erweitert auf [3][50] 😳

das eigentliche Problem aber lautet: du vergleichst nur den letzten Tipp mit der Zusatzzahl,
Java:
if(lotto[0][i]== 2 && lotto[1][i] == 2) System.out.println("Treffer bei der ZS!");
			if(lotto[0][i] == 2 && lotto[2][i] == 2) System.out.println("Treffer bei der ZS!");

Steht da nicht, durchlaufe die gesamte Reihe 0 mit i wie auch Reihe 1 mit i.Und wenn 0 und 1 an der i-ten Stelle eine 2 stehen hat, dann gibt das syso aus.
Ok, jez wo ich das so schreibe bedeutet es dass ich nie auf die ZS komme, richtig?

Ich muss die ZS in dem Array als Index finden, oder? So nach dem Motto, suche ZS aus der Reihe 1 oder 2 des Arrays [1] und prüfe, ob das i der ZS als Zahl entspricht und prüfe dann ob die vermeintliche ZS == 2 drin stehen hat.
 
Zuletzt bearbeitet:
> if(lotto[0]== 2 && lotto[1] == 2) System.out.println("Treffer bei der ZS!");
> Steht da nicht, durchlaufe die gesamte Reihe 0 mit i wie auch Reihe 1 mit i.Und wenn 0 und 1 an der i-ten Stelle eine 2 stehen hat, dann gibt das syso aus.

schau dir deinen vorherigen Code/ dein System an,
nur für den letzten Tipp wird eine 2 eingetragen, für die ersten 6 eine 1,
zu einem Tipp 49, 2, 3, 6, 7, 8, 9 kommt für 9 die 2 ins größere Array zum Tipp, nur die 9 kann als 2 verglichen werden,
klappt nur wenn die 9 die Zufallszahl ist,
für 49, 2, 3 usw. kommt eine 1 ins große Array,
was hilft es wenn unter den Lottozahlen die 49 die 2 der Zufallszahl bekommt, aber für den Tipp dort 1 eingetragen ist?
kein Vergleich möglich


eine Änderung fällt mir jetzt noch ein: statt genau auf 1 und 2 zu vergleichen, prüfe überall nur ob > 0,
stelle damit zunächst Treffer fest,
im Falle eines Treffers kannst du nachschauen, ob für die Ziehung eine 2 eingetragen ist, dann Zusatzzahl-Treffer,
evtl. die normale Treffer-Anzahl senken bzw. noch gar nicht erhöht haben
 
Man, du hast recht!
Ich habs einfach irgendwie nicht gerallt.

Du meintest, dass folgende Zahlen untereinander nicht passten, daher auch nicht als ZS anerkannt werden konnten (ich streiche unnötige Zeilen raus und es bleiben nur die letzten 3 Indexe übrig:
Array lotto: [2, 0, 0]
Array lotto: [1, 0, 0]
Array lotto: [0, 0, 0]

Ich habs nun wie folgt geändert:
Java:
for ( int i = 0; i<lotto[0].length; i++){
			if (lotto[0][i] > 0 && lotto[1][i] > 0 ){
				treffer1++;
			}
					if (lotto[0][i] ==2 && lotto[1][i]==2){
						treffer1--;
						System.out.println("Spieler 1 hat ZS Getroffen!!!");
					}
			if(lotto[0][i] > 0 && lotto[2][i] > 0) {
				treffer2++;
			}
			if (lotto[0][i] ==2 && lotto[2][i]==2){
				treffer1--;
				System.out.println("Spieler 2 hat ZS Getroffen!!!");
			}
		}

Ich hab die ZS der 1. Reihe zu Testzwecken auf die ZS der 0. Reihe angepasst, daher nun andere Ausgabe:
Array Ziehung: [2, 9, 3, 12, 11, 14, 48]
Die ZS lautet: 48
Spieler 1: [9, 2, 3, 6, 7, 8, 48]
Spieler 1: [17, 21, 10, 11, 12, 13, 15]
Array lotto: [2, 0, 0]
Array lotto: [2, 0, 0]
Array lotto: [0, 0, 0]
Spieler 1 hat ZS Getroffen!!!
Spieler 1 hat 3 treffer
Spieler 2 hat 2 treffer



Um ehrlich zu sein, so wie ich das Prog nun sehe, ist es unvorteilhaft.
Die Idee die ZS mit einer 2 zu hinterlegen kommt von einer Musterlösung.
Sicher ists eine Idee der Problematik entgegen zu treten, aber ich werde das Prog definitiv noch mal umschreiben. WIe die anderen schon meinten, unübersichtlich.

Nun denn, vielen Dank für deine Geduld :applaus:
Und auch Danke an die anderen 😉

Bis ganz sicher bald 😀:bae:
 

Zurück
Oben