Methoden Arrays vergleichen

djjava

Mitglied
Hey!

Möchte ein Programm schreiben das Lottozahlen ausgibt(6 aus 45).
Der Benutzer soll eingeben können wie viele Tipps er generieren will.
Anschließend werden so viele Tipps wie der Benutzer wünscht generiert.
Mein Problem liegt darin, alle Tipps miteinander zu vergleichen, sodass kein Tipp zweimal vorkommt.
Wie setze ich das um????

Mein Code bis jetzt:
Java:
public class UE_03_c_Lottozahlen_2 {
	public static void main(String[] args) {
System.out.println(test());
}
	public static String test(){
		String neu="";
		String arrays="";
		
		for(int i=0; i<4;i++){
				String [] tipp = generateLottoTipp();
				
				neu = Arrays.deepToString(tipp);
				arrays = arrays+neu+"";
			
			
		
		}return arrays;
	}

	private static String[] generateLottoTipp() {
		
		String[] tipp;
		tipp=new String[6];
		boolean[] lottozahlen=new boolean[46];

		int neuerTipp = 0;  
		for(int i =0; i<=5;i++){

			while(true){		
				neuerTipp = (int) (Math.random()*45+1);
				
				if(!(lottozahlen[neuerTipp])){
					break;
				}
			}
			lottozahlen[neuerTipp]=true;
			tipp[i]=neuerTipp+"";
		}
		
		Arrays.sort(tipp);
		return tipp;
	}
}
 

Gucky

Top Contributor
Also ich würde die Tipps vorher nach Größe der einzelnen Zahlen sortieren und dann den neu generierten, vollständigen sechser Tipp mithilfe von .equals(String) mit den älteren vergleichen. Sollte der neue einem älteren entsprechen (.equals() gibt true zurück) dann muss der sechser Tipp nochmal generiert werden. Solange, bis .equals() nicht mehr true zurückgibt.
 

DrZoidberg

Top Contributor
Du kannst auch ein HashSet verwenden um sicherzustellen, dass kein Tipp doppelt vorkommt. Ausserdem würde ich die Tipps als ArrayList zurückgeben, nicht als Strings.

Java:
private static ArrayList<Integer> generateLottoTipp() {
    ArrayList<Integer> tipp = new ArrayList<>();
    for(int i = 1; i <= 45; i++) tipp.add(i);
    Collections.shuffle(tipp);
    tipp.subList(6, 45).clear();
    Collections.sort(tipp);
    return tipp;
}

public static ArrayList<ArrayList<Integer>> test(int n) {
    HashSet<ArrayList<Integer>> set = new HashSet<>();
    while(set.size() < n) set.add(generateLottoTipp());
    return new ArrayList<ArrayList<Integer>>(set);
}

public static void main(String[] args) {
    for(ArrayList<Integer> tipp: test(6)) {
        System.out.println(tipp);
    }
}
 
Zuletzt bearbeitet:

geqoo

Bekanntes Mitglied
Also ich finde meine gebastelte Klasse ist recht überschaubar :)
Sie braucht für 1 Million Lottotipps (keine Duplikate) ca. 10 Sekunden (alter Rechner, recht schlechte CPU).

Java:
import java.util.TreeSet;

public class Zufall {

	public static void main(String[] args) {
		Integer versuche = Integer.parseInt(args[0]);
		TreeSet<String> tipps = new TreeSet<String>();

		/*
		 * Hier werden die 6 Lottozahlen der Liste hinzugefügt
		 */
		do {
			String lottozahlen = generateLottoTipp();
			tipps.add(lottozahlen);

			System.out.println(lottozahlen);
		}
		while (tipps.size() != versuche);
	}

	private static int random (Integer von, Integer bis) {
		/*
		 * Math.random() erzeugt einen Zufallswert zwischen 0 und 1.
		 * Das Ergebnis multiplizieren wir mit bis-von (45-1 = 44)
		 * Dann entfernen wir die Nachkommastellen (durch den typecast auf int).
		 * Jetzt erhalten wir ein Ergebnis, das von 0 bis 44 geht.
		 * Danach müssen wir noch "von" draufrechnen, damit das Ergebnis 
		 * um die richtigen Stellen verschoben wird.
		 * In diesem Falle um 1 Stelle, also 1 bis 45.
		 */
		return von + (int)(Math.random() * (bis-von));
	}

	private static String generateLottoTipp() {
		TreeSet<Integer> lottozahlen = new TreeSet<Integer>();

		/*
		 * Wir erzeugen solange Zahlen, bis wir 6 verschiedene zusammen haben.
		 */
		while (lottozahlen.size() != 6) {
			int random = random(1, 45);
			lottozahlen.add(random);
		}

		return lottozahlen.toString();
    }
}

Sicherlich ist da auch noch einiges an Optimierungspotenzial. Man könnte z.B. die generateMethode noch soweit verschärfen, dass sie gewisse Wertemengen nicht zulässt, um eine höhere Chance zu erzielen, dass die 6 zufälligen Zahlen nicht schon bei den Tipps vorhanden sind.
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Wo überprüfst du, ob die Zahlen innerhalb des Tipps nicht schon einmal vorgekommen sind? Da böte sich womöglich eine LinkedList an, welche du einmal am Anfang mit Zahlen von 1-45 füllst und dann nur noch für jeden neuen Tipp neu holst. Daraus holst du dann die Zahlen und löschst die geholten Zahlen. Danach holst du die Liste wieder und machst das gleiche, bis genug Tipps generiert wurden.

Und eine Frage noch: Wo checkst du, ob der Tipp schon einmal vorgekommen ist?

Aber 10 Sekunden auf einem eher bescheidenen Rechner und mit einem Java-Programm. Wie lange braucht dann ein C++ Programm auf einem Gamer PC? Zwei Sekunden?
 

DrZoidberg

Top Contributor
Auf nem Gamer PC benötigt das Java Programm schon weniger als 1 Sekunde für 1 Million Tipps. Mit ein paar Optimierungen kann man es sogar auf 0,2 Sekunden bringen.
 
Zuletzt bearbeitet:

djjava

Mitglied
Leute danke fuer eure bemuehungen....leider kennen ich mich nicht sogut aus , deshalb wollte ich das array in einen String umwandeln und dann schauen ob es in dem neu zusammengebauten String enthalten ist. Wie wuerde so etwas in Codeform ausschauen?

Danke schonmal !
 

geqoo

Bekanntes Mitglied
Das geht mit String.contains(expression);

Java:
arrayVariable.toString().contains(neuerTipp);

Und eine Frage noch: Wo checkst du, ob der Tipp schon einmal vorgekommen ist?


Das macht das TreeSet für mich ;)
Das ist eine Mischung aus HashSet (keine Duplikate) und einer TreeMap (geordnete Werte)
 
Zuletzt bearbeitet:

djjava

Mitglied
Okay danke ....Jetzt habe ich einen String mit sechs Zahlen...den vergleiche ich mit dem Tippps davor. Wennn einen Tipp gleich ist si generiere ich einen neuen. Also brauche ich ein If mit eqalse abfrage. Nur wie kann ich danach den tipp wieder neu genierienen. Komme ja nicht mehr zurueck zu dem Code wo der Tipp enstanden ist.
 

ARadauer

Top Contributor
Leute danke fuer eure bemuehungen....leider kennen ich mich nicht sogut aus , deshalb wollte ich das array in einen String umwandeln und dann schauen ob es in dem neu zusammengebauten String enthalten ist. Wie wuerde so etwas in Codeform ausschauen?

Danke schonmal !

Also das ist eine sehr schlechte idee, du kannst ja nicht prüfen ob 2 enthalten ist wenn 20 schon drinnen ist...
Warum machst du dir nicht einfach eine Methode die überprüft ob eine zahl schon in dem Array enthalten ist? Jede Zahl mit der zu suchenden vergleiche, wenn du einnen Treffer hast true zurück geben, wenn du keinen hast false...



Java:
public static boolean contains(int toSearchFor, int[] vales){
        for(int v : vales){
            if(v == toSearchFor){
                return true;
            }
        }
        return false;
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
R Werte und Reihenfolge in 2d Arrays vergleichen Java Basics - Anfänger-Themen 5
N 2D Arrays jedes xy vergleichen Java Basics - Anfänger-Themen 7
J zwei String Arrays miteinander vergleichen Java Basics - Anfänger-Themen 18
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
A Methoden Char-Arrays auf aufeinanderfolgende Elemente vergleichen! Java Basics - Anfänger-Themen 7
J 2 Arrays vergleichen (Unterschiedliche Längen) Java Basics - Anfänger-Themen 42
Shizmo Arrays miteinander vergleichen Java Basics - Anfänger-Themen 22
D Erste Schritte Arrays vergleichen Java Basics - Anfänger-Themen 1
R 2 mit Arrays bestückte LinkedLists durchsuchen/vergleichen Java Basics - Anfänger-Themen 3
J arrays vergleichen Java Basics - Anfänger-Themen 6
1 Zeichenfolgen in Arrays vergleichen Java Basics - Anfänger-Themen 8
1 Elemente von 2 Arrays vergleichen Java Basics - Anfänger-Themen 12
D Arrays vergleichen Java Basics - Anfänger-Themen 4
N Arrays miteinander vergleichen Java Basics - Anfänger-Themen 11
J 2 Arrays vergleichen Java Basics - Anfänger-Themen 16
J Inhalt eines Arrays vergleichen? Java Basics - Anfänger-Themen 8
Fab1 char Arrays vergleichen Java Basics - Anfänger-Themen 4
R Erste Schritte Arrays vergleichen und boolean Java Basics - Anfänger-Themen 5
E Elemente innerhalb eines Arrays vergleichen Java Basics - Anfänger-Themen 7
J Dimensionen zweier Arrays vergleichen Java Basics - Anfänger-Themen 4
M 2 Arrays mit komplexen Datentyp vergleichen Java Basics - Anfänger-Themen 8
C Arrays vergleichen und Fehlinhalt ausgeben Java Basics - Anfänger-Themen 5
J Zeilen eines Arrays vergleichen Java Basics - Anfänger-Themen 2
N Arrays als Mengen vergleichen Java Basics - Anfänger-Themen 5
J arrays vergleichen Java Basics - Anfänger-Themen 3
T Arrays vergleichen Java Basics - Anfänger-Themen 5
V Inhalt von arrays vergleichen Java Basics - Anfänger-Themen 6
R String Arrays Inhalte vergleichen Java Basics - Anfänger-Themen 4
M Arrays vergleichen Java Basics - Anfänger-Themen 2
H Mehrdimensionale Arrays vergleichen Java Basics - Anfänger-Themen 6
P arrays vergleichen geht nicht? Java Basics - Anfänger-Themen 3
B Vergleichen von Arrays Java Basics - Anfänger-Themen 3
D Arrays vergleichen (oder wie man das auch nennen will). Java Basics - Anfänger-Themen 13
J Mehrdimensionale Arrays inhaltlich vergleichen. Java Basics - Anfänger-Themen 3
M Felder innerhalb eines Arrays vergleichen Java Basics - Anfänger-Themen 2
N Mischen und vergleichen von Arrays Java Basics - Anfänger-Themen 6
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste und Arrays Java Basics - Anfänger-Themen 12
N mehrdimensionale arrays Java Basics - Anfänger-Themen 12
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
S Hilfe bei Praktischen Aufgaben von Arrays Java Basics - Anfänger-Themen 39
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
J Mehrdimensionale Arrays Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
M Arrays Java Basics - Anfänger-Themen 3
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
Ostkreuz Summieren von Arrays Java Basics - Anfänger-Themen 4
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
rosima26 Geordnete Arrays ausgeben Java Basics - Anfänger-Themen 31
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
E Zinsrechnung mithilfe von Arrays Java Basics - Anfänger-Themen 12
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
H Arrays befüllen Java Basics - Anfänger-Themen 43
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
D Arrays Java Basics - Anfänger-Themen 9
C Java Arrays - Ausgabe in Methode Java Basics - Anfänger-Themen 12
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
N Arrays Java Basics - Anfänger-Themen 5
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
U zwei 2D arrays auf gleich sein überprüfen Java Basics - Anfänger-Themen 14
melaniemueller Lagerverwaltung erstellen - mehrdimensionale Arrays Java Basics - Anfänger-Themen 62
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
A Arrays aufsummieren Java Basics - Anfänger-Themen 11
C Wie 2 Arrays zusammenfügen und sortieren? Java Basics - Anfänger-Themen 11
S Arrays aneinanderketten Java Basics - Anfänger-Themen 20
Sinan Arrays auflisten ohne Wiederholung Java Basics - Anfänger-Themen 28
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
D Verschlüsslungsaufgabe / Arrays Java Basics - Anfänger-Themen 6
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
S zweidimensionale char arrays Java Basics - Anfänger-Themen 14
J Methoden Mehrdimensionale Arrays übereinander legen Java Basics - Anfänger-Themen 5
D Verwirrung bei Streams aus primitiven Arrays Java Basics - Anfänger-Themen 2
P Arrays mit verschiedenen Längen miteinander dividieren. Java Basics - Anfänger-Themen 1
P Wie kann ich die Zahlen dieses Arrays dividieren? Java Basics - Anfänger-Themen 2
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
Zeppi Arrays[i] Java Basics - Anfänger-Themen 7
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
J B-Sprache mit Arrays ausführen Java Basics - Anfänger-Themen 18
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
K Sudoku mit 2D Arrays Java Basics - Anfänger-Themen 19
T Vertikales Histogramm mit Arrays Java Basics - Anfänger-Themen 3
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben