Wie kann man in Java nach Arrays auf Duplikate prüfen

Hallo miteinander,

ich habe ein Array erstellt, der 3 Integer-Werte abspeichern soll. Diese Integer-Werte sollen nicht 2 mal den gleichen Wert haben. Sollte dies dennoch so sein, dann soll zum Beispiel der Index 1 oder 2 einen neuen Wert generieren und erneut prüfen, ob dieser Doppelt ist. Wenn nein, dann soll die Schleife weiterlaufen, wenn ja, dann soll ein neuer Wert generiert werden und das soll so lange passieren, bis der Wert noch gar nicht existiert.

Code:

Java:
import java.util.Arrays;

public class Test {
    
    public static void main(String[] args) {
        
        int[] zahlen = new int[3];
        
        for(int i = 0; i<zahlen.length; i++) {
            zahlen[i] = (int) (Math.random()*3+1);
        }
        
        System.out.println(Arrays.toString(zahlen));
        
    }
    
    
}
 

KonradN

Super-Moderator
Mitarbeiter
Dann überlege doch erst einmal, wie Du das machen würdest.

Du hast einen Würfel und Du sollst 3 unterschiedliche Würfelergebnisse aufschreiben. Kriegst Du das hin? Was hast Du gemacht?
 
Dann überlege doch erst einmal, wie Du das machen würdest.

Du hast einen Würfel und Du sollst 3 unterschiedliche Würfelergebnisse aufschreiben. Kriegst Du das hin? Was hast Du gemacht?
Ich habe es mal probiert so wie du es gesagt hast. Hinbekommen habe ich es, aber nicht wie du es dir gewünscht hast. Da stehe ich vor dem gleichen Problem.

Das was ich auskommentiert habe, mit "//if(wurfversuce ==)". Das wäre meine Vermutung, dass man dort einen Abgleich macht und dann die Schleife neustartet mit Continue oder sowas ähnliches. Vielleicht kann man dort auch eine Methode starten, sowas ähnliches wie .equals oder sowas, wie man es auch kennt, wenn man Objekte abgleicht.

Java:
import java.util.Arrays;

public class Test {
    public static void main (String[] args) {
        
        int wuerfelseiten = 6;
        int[] wurfversuce = new int [3];
        
        for(int i=0; i<wurfversuce.length; i++) {

            wurfversuce[i] = (int) (Math.random()*wuerfelseiten+1);
            
            //if(wurfversuce[i] ==)
            
        }
        
        System.out.println(Arrays.toString(wurfversuce));
        
    }
}
 

Jw456

Top Contributor
Erstelle eine Methode die das Array übergeben bekommt und den neu erstellten Wert.
In der Methode gehst du das Array durch und gibst wenn der Wert in dem Array ist True zurück.
Wenn nicht dann False.

Du musst schon nach jedem Würfel das Array erneut prüfen. Deshalb eine Neue Methode.
 

KonradN

Super-Moderator
Mitarbeiter
Bei meiner Frage ging es ja erst einmal um eine Beschreibung. Vergiss den Code!

Du musst erst einmal schauen: kriegst Du das hin? Dazu einfach einen Würfel nehmen und machen!

Dann nachdenken: Was hast Du genau gemacht? Und das beschreibst Du in Worten!

Dann kommt etwas raus wie:
1 Du hast einen Zettel auf den Du die Zahlen schreiben kannst (jetzt 3)
2 Du würfelst und bekommst so eine Augenzahl.
3 Du schaust: Ist diese Augenzahl bereits auf dem Zettel? Wenn ja, dann wieder zu Schritt 2.
4 Du schreibst die Augenzahl auf
5 Du schaust: Hast du die gewünschten 3 Zahlen erwürfelt? Wenn nein, dann weiter zu Schritt 2.

Oder Du überlegst es Dir von oben herab in dem Du die Schritte abstrahiert aufschreibst
--> mache 3 Mal:
-----> Würfel so lange, bis Du eine Augenzahl hast, die noch nicht auf dem Zettel steht
-----> schreibe die Augenzahl auf.

Und dann merkst Du: Den Schritt mit dem "Würfel so lange, bis Du eine Augenzahl hast, die noch nicht auf dem Zettel steht" muss man noch einmal beschreiben. Da hast Du dann eine weitere Beschreibung.

Wichtig ist:
Ergebnis sind Beschreibungen, die ein Mensch, der die Aufgabe nicht kennt, lesen und ausführen kann und der macht dann genau das, was gefordert ist.

Erst wenn Du das hast, dann schreibst Du Code! Wenn Du mehrere Beschreibungen hast, dann wird jede Beschreibung eine Methode.
 
Erstmal Danke für eure Hilfsbereitschaft. Die Erklärung von @JavaUndC-Prog im Beitrag: https://www.java-forum.org/thema/array-befuellen-auf-doppelte-werte-pruefen.154491/ kam ich zur Lösung. Die Lösung sieht nicht besonders schön aus, aber die hilft mir vorerst weiter. Daraus kann man gut eine Methode draus basteln.

Lösung:
Java:
import java.util.Arrays;



public class Test {
    public static void main(String[] args) {

        int[] zahlen = new int[3];

        for(int i = 0; i<zahlen.length; i++) {
            zahlen[i] = (int) (Math.random()*3+1);
            
        for(int j = 0; j < i; j++) {
                if(zahlen[i] == zahlen[j]) {
                    zahlen[i] = (int) (Math.random()*3+1);
                    i--;
                }
            }
        }
        System.out.println(Arrays.toString(zahlen));
    }
}
 

Blender3D

Top Contributor
Erstmal Danke für eure Hilfsbereitschaft. Die Erklärung von @JavaUndC-Prog im Beitrag: https://www.java-forum.org/thema/array-befuellen-auf-doppelte-werte-pruefen.154491/ kam ich zur Lösung.
👍
Die Lösung ist in Ordnung. Ein Manko ist die laufende Variable, die erhöht und wieder reduziert wird.

Hier ein paar Hinweise, um den Code besser zu gestalten.
Der erste und wichtigste ist
1) Teile und Herrsche. Das bedeutet zerlege Dein zu lösendes Problem in kleiner Teilprobleme.
Diese sind leichter lösbar und führen zu wieder verwendbaren Code, für später zu lösende Problem.
Außerdem wird der Code dadurch viel übersichtlicher.
2) Benutze sprechende Variablen
Der Code wird lesbarer und das erspart viel Dokumentation.

Die Aufgabestellung lautet:
Erzeuge ein zufälliges Integer Array der Länge max ( max= 3 ) ohne doppelten Einträge.
Die Teilaufgaben die man daraus ableiten könnte sind:
1) Erzeuge eine Zufallszahl von 1 - max.
Java:
public static int rndInteger(int max)
2) Beinhaltet ein Integer Array einen bestimmten Wert?
Java:
public static boolean contains(int[] array, int number)
3) Erzeuge ein zufälliges Integer Array der Größe max ohne doppelten Einträge
Java:
public static int[] getRndArrayOfUniqueInt(int max)

Java:
import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[] numbers = getRndArrayOfUniqueInt(3);
        System.out.println(Arrays.toString(numbers));
    }

    public static boolean contains(int[] array, int number) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == number)
                return true;
        }
        return false;
    }

    public static int[] getRndArrayOfUniqueInt(int max) {
        int[] numbers = new int[max];
        int id = 0;
        do {
            int num = rndInteger(max);
            if (!contains(numbers, num)) {
                numbers[id] = num;
                id++;
            }
        } while (id < max);
        return numbers;
    }

    public static int rndInteger(int max) {
        return (int) (Math.random() * max) + 1;
    }
}
 
👍
Die Lösung ist in Ordnung. Ein Manko ist die laufende Variable, die erhöht und wieder reduziert wird.

Hier ein paar Hinweise, um den Code besser zu gestalten.
Der erste und wichtigste ist
1) Teile und Herrsche. Das bedeutet zerlege Dein zu lösendes Problem in kleiner Teilprobleme.
Diese sind leichter lösbar und führen zu wieder verwendbaren Code, für später zu lösende Problem.
Außerdem wird der Code dadurch viel übersichtlicher.
2) Benutze sprechende Variablen
Der Code wird lesbarer und das erspart viel Dokumentation.

Die Aufgabestellung lautet:
Erzeuge ein zufälliges Integer Array der Länge max ( max= 3 ) ohne doppelten Einträge.
Die Teilaufgaben die man daraus ableiten könnte sind:
1) Erzeuge eine Zufallszahl von 1 - max.
Java:
public static int rndInteger(int max)
2) Beinhaltet ein Integer Array einen bestimmten Wert?
Java:
public static boolean contains(int[] array, int number)
3) Erzeuge ein zufälliges Integer Array der Größe max ohne doppelten Einträge
Java:
public static int[] getRndArrayOfUniqueInt(int max)

Java:
import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[] numbers = getRndArrayOfUniqueInt(3);
        System.out.println(Arrays.toString(numbers));
    }

    public static boolean contains(int[] array, int number) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == number)
                return true;
        }
        return false;
    }

    public static int[] getRndArrayOfUniqueInt(int max) {
        int[] numbers = new int[max];
        int id = 0;
        do {
            int num = rndInteger(max);
            if (!contains(numbers, num)) {
                numbers[id] = num;
                id++;
            }
        } while (id < max);
        return numbers;
    }

    public static int rndInteger(int max) {
        return (int) (Math.random() * max) + 1;
    }
}

Vielen Dank für deine Ausführliche Erklärung und für das Schreiben des Codes! Das ist sehr großzügig von dir!
 

RegExs

Mitglied
ich habe ein Array erstellt, der 3 Integer-Werte abspeichern soll. Diese Integer-Werte sollen nicht 2 mal den gleichen Wert haben.
Das ist ja so ähnlich wie eine Lottoziehung... (zum Beispiel 6aus49)

So wäre ich es wahrscheinlich angegangen: :)

Java:
import java.util.Arrays;

public class Gen {
    public static int[] randomsWithoutDuplicates(int a, int b, int stepWidth, int n) {
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            int x = (int) ((b - a + stepWidth) / stepWidth * Math.random()) * stepWidth + a;
            boolean contains = false;
            for (int j = 0; j < i; j++) {
                if (x == arr[j]) {
                    contains = true;
                    break;
                }
            }
            if (!contains) {
                arr[i] = x;
            } else {
                i--;
            }
        }
        return arr;
    }

    public static void main(String[] args) {
        System.out.println(Arrays.toString(randomsWithoutDuplicates(1, 3, 1, 3)));
        System.out.println(Arrays.toString(randomsWithoutDuplicates(2, 6, 2, 3)));
        System.out.println(Arrays.toString(randomsWithoutDuplicates(2, 11, 3, 4)));
    }
}

Das contains... solte man aber der besseren Lesbarkeit halber in eine Methode setzen...
 

Marsupilami

Mitglied
Auch ein netter Snippet um doppelt vorkommende Werte von vornherein auszuschließen;
Java:
package arrayaufgabe1;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;

public class arrayaufgabe1 {

    public static void main(String[] args)
    {
        System.out.println(Arrays.toString(zufallsarray(5)));
    }
public static int[] zufallsarray(int n)
{
    int[] zahlen = new int[n];
    ArrayList<Integer> zahlenliste = new ArrayList<Integer>();
    
    for(int i=1; i<(n+1); i++)
    {
        zahlenliste.add(i);
    }

    for(int i=0; i<zahlen.length; i++)
    {
        int zahlenlisteindex=new Random().nextInt(zahlenliste.size());
        zahlen[i]=zahlenliste.get(zahlenlisteindex); //Wert der zahlenliste wird dem array zugewiesen
        zahlenliste.remove(zahlenlisteindex);//Wert der Zahlenliste wird gelöscht damit er nicht doppelt auftritt.
    }
    return zahlen;
    
}
}
 

KonradN

Super-Moderator
Mitarbeiter
Du hast die Idee, dass Du sozusagen ein Kartenspiel hast. Da nimmst Du dann zufällig eine Karte heraus. Damit ist die Karte nicht mehr im Stapel und Du kannst die damit kein zweites Mal ziehen.

Die Hinweis von @RegExs ist (So wie ich ihn verstanden habe): Das Kartenspiel kann man auch einfach mischen. Nach dem Mischen nimmt man dann einfach von oben die gewünschte Anzahl Karten.

(Hier einfach zum besseren Verständnis die Analogie zu einem Kartenspiel.)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
B Umstieg von C# nach Java Java Basics - Anfänger-Themen 18
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
D Ich suche nach einer Möglickeit den Webseiten Inhalt per Java zu analysieren Automatisch Java Basics - Anfänger-Themen 3
K Schlüsselworte Nach Java update findet mdb Datei nicht Java Basics - Anfänger-Themen 6
C Implizite Typumwandlung nach Java 8 anders? Java Basics - Anfänger-Themen 7
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
G mache aus Test nach sortieren estt oder java aajv Java Basics - Anfänger-Themen 5
D Celsius nach Fahrenheit Java Java Basics - Anfänger-Themen 8
S Erste Schritte Suche nach einem guten JAVA-Buch (Definition im Thread) Java Basics - Anfänger-Themen 6
C Nach Java-Installation sind Befehle erfolglos Java Basics - Anfänger-Themen 4
R JDK installieren Nach Update auf java 1.7 Connection refused Java Basics - Anfänger-Themen 9
K Fehler nach Installation von Java 3D Java Basics - Anfänger-Themen 2
B Java nach bestimmter dateiendung suchen Java Basics - Anfänger-Themen 6
C *.java Datei nach Doppelklick mit VM ausführen Java Basics - Anfänger-Themen 29
M Einschätzung zu Kenntnissen nach folgendem Java-Kurs Java Basics - Anfänger-Themen 2
Golo Roden Von .NET nach Java - wie? Java Basics - Anfänger-Themen 10
G Java-Frames funktionieren nach Neuinstallation nicht mehr. Java Basics - Anfänger-Themen 3
V suche nach nsis script für java applikation Java Basics - Anfänger-Themen 2
D Probleme bei Code Portierung von C# nach Java [Gelöst] Java Basics - Anfänger-Themen 4
P Fragen nach 12 monatiger Java Pause :P Java Basics - Anfänger-Themen 21
A Java nach UML Java Basics - Anfänger-Themen 6
G zwei java nach einander ausführen Java Basics - Anfänger-Themen 14
G Netzlaufwerk via Java nich lesbar nach Startup Java Basics - Anfänger-Themen 5
C Nach Installation kein Java-Compiler Java Basics - Anfänger-Themen 7
P Umstieg von Delphi nach Java Java Basics - Anfänger-Themen 2
S Export nach Excel in Java Java Basics - Anfänger-Themen 7
A Stringübergabe von JAVA nach C++ Java Basics - Anfänger-Themen 4
S Java nur nach Neustart aktiv? Java Basics - Anfänger-Themen 8
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben