Zufälliges Objekt aus der ArraylList ohne java.util.Random

LucaToni

Aktives Mitglied
Hallo,

gibt es eine Möglichkeit ein zufälliges Objekt aus einer ArrayList zurückzugeben ohne die Klasse java.util.Random zu benutzen?
 

TM69

Bekanntes Mitglied
Nachtrag:
Code:
public class LinearCongruentialGenerator {

    private int max;
    private int last;

    public static void main(String[] args) {
        SimpleRandom rand = new SimpleRandom(10);

        for (int i = 0; i < 100; i++) {
            System.out.println(rand.nextInteger());
        }

    }

    public LCG(int max){
        this.max = max;
        
        last = (int) (System.currentTimeMillis() % max);
    }
    
    public int nextInteger(){
        last = (last * 32719 + 3) % 32749;
        return last % max;
    }
}
Wie aber schon im Wikipedia geschrieben ist dieses keine echte Zufallszahl, sondern es sieht nur so aus als sei es ein.
 

mrBrown

Super-Moderator
Mitarbeiter
Er hat nur geschrieben


Also bitte erst lesen, dann schreiben.
Keine Sorge, wie du der ersten Antwort in diesem Thread entnehmen kannst, hab ich seine Frage gelesen.

Das sollte nur ein weiterer Hinweis sein, das es ziemlicher Unsinn ist, auf java.util.Random zu verzichten, wenn es nicht sehr gute Gründe dagegen gibt - und wenn es Gründe gibt, sprechen die meist auch gegen ein (schlechtes) Nachimplementieren von Random.

Es gibt durchaus genügend Dinge an Random, die schlecht gelöst sind, aber die sind in nahezu jeder eigenen Implementierung noch schlechter gelöst, zusätzlich zu anderen Problemen.
 

TM69

Bekanntes Mitglied
Keine Sorge, wie du der ersten Antwort in diesem Thread entnehmen kannst, hab ich seine Frage gelesen.

Das sollte nur ein weiterer Hinweis sein, das es ziemlicher Unsinn ist, auf java.util.Random zu verzichten, wenn es nicht sehr gute Gründe dagegen gibt - und wenn es Gründe gibt, sprechen die meist auch gegen ein (schlechtes) Nachimplementieren von Random.

Es gibt durchaus genügend Dinge an Random, die schlecht gelöst sind, aber die sind in nahezu jeder eigenen Implementierung noch schlechter gelöst, zusätzlich zu anderen Problemen.
Da stimme ich dir zu. Aber woher weist du, dass es nicht aus einer Aufgabe stammt und der Dozent bewusst reingeschrieben hat: "Es soll nicht die Klasse java.util.Random benutzt werden"?
 

mrBrown

Super-Moderator
Mitarbeiter
Aber woher weist du, dass es nicht aus einer Aufgabe stammt und der Dozent bewusst reingeschrieben hat: "Es soll nicht die Klasse java.util.Random benutzt werden"?
Ich weiß es nicht, aber die meisten Dozenten sind zu besseren Aufgaben in der Lage :)

So eine Aufgabe wäre für Anfänger auf keiner Ebene interessant. Interessant wäre es vielleicht im Sinne von „was kann man besser machen als Random“, aber das würde dann nicht hier im Anfänger-Forum landen, und vor allem nicht im Kontext der Verwendung mit ArrayList :)
 

TM69

Bekanntes Mitglied
Ich weiß es nicht, aber die meisten Dozenten sind zu besseren Aufgaben in der Lage :)

So eine Aufgabe wäre für Anfänger auf keiner Ebene interessant. Interessant wäre es vielleicht im Sinne von „was kann man besser machen als Random“, aber das würde dann nicht hier im Anfänger-Forum landen, und vor allem nicht im Kontext der Verwendung mit ArrayList :)
Woher willst du

1. Wissen das er ein Anfänger ist?
2. Er z.B. nicht Informatik studiert?

Ich wiederhole mich. Er hat lediglich geschrieben:
gibt es eine Möglichkeit ein zufälliges Objekt aus einer ArrayList zurückzugeben ohne die Klasse java.util.Random zu benutzen?
und evtl. ist es eine Aufgabe des Dozenten. Ich selber habe als Dozent (im Auftrag meines Profs) an der FH so eine ähnliche Aufgabe damals meinen Studenten gegeben. Allerdings in C++.
 
K

kneitzel

Gast
Also der TE hat es als Anfänger Thema einsortiert. Daher ist die Annahme, dass ein Anfänger die Frage aufgeworfen hat doch durchaus gerechtfertigt...

Und wann ist man kein Anfänger mehr? Wenn man in einem Informatik LK 15 Punkte hat? Oder wenn man sich eingeschrieben hat?

In meinen Augen gehört da etwas mehr dazu. Das haben hier genug Leute gut demonstriert.

Und auch bei manchen Aufgabenblättern unterstelle ich dem Ersteller, dass er in Sache Softwareentwicklung ein Anfänger ist.... nicht hier - da kenne ich zu wenig ... der Kontext kann das ja rechtfertigen ... und soqas wirst du bestimmt auch schon gesehen haben ....
 

mrBrown

Super-Moderator
Mitarbeiter
Schon mal Entschuldigung für das OT, ich hoffe mal der TO hat bereits eine Antwort zu seiner Frage bekommen :)


Woher willst du

1. Wissen das er ein Anfänger ist?
2. Er z.B. nicht Informatik studiert?
Beides weiß ich nicht, ich kann nur aus dem hier bekannten Kontext etwas schlussfolgern :)

Das er Anfänger ist, schließe ich einfach mal aus dem Bereich - "Anfänger-Themen" - in dem wie uns hier befinden und aus der Fragestellung. Jemand mit viel Erfahrung in Java würde sie vermutlich anders stellen (zb den Kontext der ArrayList weglassen; Gründe aufführen, warum Random nicht geeignet ist, ...).

Das er Informatik studiert bzw Java lernt, würde ich einfach mal daraus schließen, dass er im Anfängerforum eine Frage zu Java stellt.

Also Ja, ich gehe davon aus, dass @LucaToni grad im Begriff ist, Java zu lernen, vermutlich im Rahmen eines Studiums :) Falls ich damit falsch liege möge er mich gerne korrigieren :)


und evtl. ist es eine Aufgabe des Dozenten. Ich selber habe als Dozent (im Auftrag meines Profs) an der FH so eine ähnliche Aufgabe meinen Studenten gegeben. Allerdings damals auf C++.
Natürlich kann es eine Aufgabe eines Dozenten sein, nur ist es dann eine sehr schlechte.

Einmal aufgrund des Kontextes mit der ArrayList: Ginge es hauptsächlich um die Implementierung des Zufallszahlen-Generators, wäre das ziemlich sinnlos, stattdessen gäbe es deutlich sinnvollere Möglichkeiten für die Anwendung drum herum. Außerdem kann man durch den Kontext durchaus annehmen, dass die Zufallszahlen-Generierung Teil einer größeren Aufgabe ist. In einer größeren Aufgabe, die offensichtlich die Benutzung von JDK-Klassen erlaubt, einzelne JDK-Klassen, vor allem aus solchen Randgebieten, zu verbieten, ist auch wenig sinnvoll. Sinnvoller wäre in einem solchen Kontext das explizite Fordern der Nutzung vorhandener Klassen - ein typisches Problem ist eben "ich mache alles selber" anstatt eines "Nutz das Vorhandene", mit so einer Aufgabe verstärkt man das dann noch.

Und dazu kommt: die Implementierung eines Zufallszahlen-Generators bringt für sich genommen keinen interessanten Lerneffekt.
  • Es ist kein Modellierungsproblem, auf der Ebene hat man also schon mal keinen Lerneffekt - anders als das typische "Telefonbuch erstellen", "Bank und Konto programmieren", Aufgaben die man hier öfters sieht.
  • Es ist kein interessanter "Algorithmus", der nötig ist. Die ganze Code dahinter ist effektiv ein trivialer Einzeiler, den man von Wikipedia kopieren kann. Man muss uU ein paar Randfälle berücksichtigen, die sind aber eben auf Java-Ebene und grad für Anfänger völlig uninteressant. Eine schönere Aufgabe auf dieser Ebene wäre zB die typische LinkedList, sieht man hier auch oft.
  • Es ist nichts, wo man "schönen Code" lernen könnte, da es eben kaum Code gibt.
  • Das ganze führt nicht zu irgendwelchen Sinnvollen Unit-Tests, da eben kaum Code und man für Zufallszahlen Tests auf ganz andere Ebene braucht.
Im Gesamten sehe ich einfach nicht, wie diese Frage irgendwie für Anfänger interessant sein könnte.


Die Aufgabe kann für Fortgeschrittene durchaus Sinn machen, im Sinne von "wie könnte man die gesamte Random-API anders, besser, modellieren", quasi analog zu "von Date zu java.time" - wenn zB @JustNobody diese Frage gestellt hätte, würde ich so einen Hintergrund erwarten (allerdings würde die Fragestellung dann vermutlich schon eine fertige Lösung beinhalten) - eine Frage auf der Ebene sehe ich hier aber nicht.
 

TM69

Bekanntes Mitglied
Also der TE hat es als Anfänger Thema einsortiert. Daher ist die Annahme, dass ein Anfänger die Frage aufgeworfen hat doch durchaus gerechtfertigt...

Und wann ist man kein Anfänger mehr? Wenn man in einem Informatik LK 15 Punkte hat? Oder wenn man sich eingeschrieben hat?

In meinen Augen gehört da etwas mehr dazu. Das haben hier genug Leute gut demonstriert.

Und auch bei manchen Aufgabenblättern unterstelle ich dem Ersteller, dass er in Sache Softwareentwicklung ein Anfänger ist.... nicht hier - da kenne ich zu wenig ... der Kontext kann das ja rechtfertigen ... und soqas wirst du bestimmt auch schon gesehen haben ....
Ein Anfänger ist man immer, wenn man sich weiterbildet / etwas neues lernt. Also insofern gebe ich dir vollkommen Recht @JustNobody
 

TM69

Bekanntes Mitglied
Schon mal Entschuldigung für das OT, ich hoffe mal der TO hat bereits eine Antwort zu seiner Frage bekommen :)



Beides weiß ich nicht, ich kann nur aus dem hier bekannten Kontext etwas schlussfolgern :)

Das er Anfänger ist, schließe ich einfach mal aus dem Bereich - "Anfänger-Themen" - in dem wie uns hier befinden und aus der Fragestellung. Jemand mit viel Erfahrung in Java würde sie vermutlich anders stellen (zb den Kontext der ArrayList weglassen; Gründe aufführen, warum Random nicht geeignet ist, ...).

Das er Informatik studiert bzw Java lernt, würde ich einfach mal daraus schließen, dass er im Anfängerforum eine Frage zu Java stellt.

Also Ja, ich gehe davon aus, dass @LucaToni grad im Begriff ist, Java zu lernen, vermutlich im Rahmen eines Studiums :) Falls ich damit falsch liege möge er mich gerne korrigieren :)



Natürlich kann es eine Aufgabe eines Dozenten sein, nur ist es dann eine sehr schlechte.

Einmal aufgrund des Kontextes mit der ArrayList: Ginge es hauptsächlich um die Implementierung des Zufallszahlen-Generators, wäre das ziemlich sinnlos, stattdessen gäbe es deutlich sinnvollere Möglichkeiten für die Anwendung drum herum. Außerdem kann man durch den Kontext durchaus annehmen, dass die Zufallszahlen-Generierung Teil einer größeren Aufgabe ist. In einer größeren Aufgabe, die offensichtlich die Benutzung von JDK-Klassen erlaubt, einzelne JDK-Klassen, vor allem aus solchen Randgebieten, zu verbieten, ist auch wenig sinnvoll. Sinnvoller wäre in einem solchen Kontext das explizite Fordern der Nutzung vorhandener Klassen - ein typisches Problem ist eben "ich mache alles selber" anstatt eines "Nutz das Vorhandene", mit so einer Aufgabe verstärkt man das dann noch.

Und dazu kommt: die Implementierung eines Zufallszahlen-Generators bringt für sich genommen keinen interessanten Lerneffekt.
  • Es ist kein Modellierungsproblem, auf der Ebene hat man also schon mal keinen Lerneffekt - anders als das typische "Telefonbuch erstellen", "Bank und Konto programmieren", Aufgaben die man hier öfters sieht.
  • Es ist kein interessanter "Algorithmus", der nötig ist. Die ganze Code dahinter ist effektiv ein trivialer Einzeiler, den man von Wikipedia kopieren kann. Man muss uU ein paar Randfälle berücksichtigen, die sind aber eben auf Java-Ebene und grad für Anfänger völlig uninteressant. Eine schönere Aufgabe auf dieser Ebene wäre zB die typische LinkedList, sieht man hier auch oft.
  • Es ist nichts, wo man "schönen Code" lernen könnte, da es eben kaum Code gibt.
  • Das ganze führt nicht zu irgendwelchen Sinnvollen Unit-Tests, da eben kaum Code und man für Zufallszahlen Tests auf ganz andere Ebene braucht.
Im Gesamten sehe ich einfach nicht, wie diese Frage irgendwie für Anfänger interessant sein könnte.


Die Aufgabe kann für Fortgeschrittene durchaus Sinn machen, im Sinne von "wie könnte man die gesamte Random-API anders, besser, modellieren", quasi analog zu "von Date zu java.time" - wenn zB @JustNobody diese Frage gestellt hätte, würde ich so einen Hintergrund erwarten (allerdings würde die Fragestellung dann vermutlich schon eine fertige Lösung beinhalten) - eine Frage auf der Ebene sehe ich hier aber nicht.
Da gebe ich dir natürlich Recht, dass so eine Aufgabe eigentlich schlecht ist, allerdings, so war es bei mir damals, als Nicht-Prof (war nur ein einfacher Dozent), die Aufgaben so durchzuführen, wie der Prof es haben will.
 

LucaToni

Aktives Mitglied
Hallo alle zusammen,

vielen Dank für die Tipps.
ich Klär mal auf bevor ihr euch noch mehr in die Haare kriegt.

1.) Ich bin Anfänger
2.) es ist ein Teil einer Aufgabe, in der man die Lieder einer Playlist zufällig zurückgeben muss und die bereits gespielten Lieder in einer hashset speichern muss.
3.) meine Uni spinnt etwas rum mit den Aufgaben und erwartet echt viel von Informatik für NICHT-INFORMATIKER und es gibt auch Aufgaben in der man Statt fertige Bibliotheken zu nutzen, Code schreiben soll, der die gleiche Funktion erfüllt wie fertige Klassen aus der Java-API... deshalb kam die Frage hier ob es eine Alternative gibt.
4.) Danke allen die mit einem guten Willen an meine Frage ran sind.
 

temi

Top Contributor
Nachtrag:
Code:
public class LinearCongruentialGenerator {

    private int max;
    private int last;

    public static void main(String[] args) {
        SimpleRandom rand = new SimpleRandom(10);

        for (int i = 0; i < 100; i++) {
            System.out.println(rand.nextInteger());
        }

    }

    public LCG(int max){
        this.max = max;
       
        last = (int) (System.currentTimeMillis() % max);
    }
   
    public int nextInteger(){
        last = (last * 32719 + 3) % 32749;
        return last % max;
    }
}
Wie aber schon im Wikipedia geschrieben ist dieses keine echte Zufallszahl, sondern es sieht nur so aus als sei es ein.
Da hast du aber noch ein paar Hürden eingebaut, oder? Die Klasse heißt anders als ihr Konstruktor und in der main() wird noch eine andere Klasse instantiiert. ;)
 

M.L.

Top Contributor
Statt fertige Bibliotheken zu nutzen, Code schreiben soll, der die gleiche Funktion erfüllt wie fertige Klassen
Mit so etwas hätten aber auch Informatik-Studierende oder Absolventen ein Problem.... Auf der anderen Seite kann es von Nutzen sein, die Hintergründe dieser oder jener Bibliotheksfunktion/API/... oder das Verhalten der JVM auf der elementaren Ebene zu kennen. Bzgl. Zufall kann radioaktiver Zerfall -neben der Systemzeit- einer näheren Recherche wert sein.
 

JennyL

Bekanntes Mitglied
Wenn ich zur Implementierung etwas nicht verwenden soll, suche ich dazu die bestmögliche oder einfachst mögliche Alternative. Insofern hat @TM69 vollkommen recht. Ich suche nicht nach der abwegigsten Möglichkeit (wie sie mrBrow vorschlägt). Der Prof kann damit überprüfen, wie gut der/die Studierende ihr Wissen bei geänderten Anforderungen übertragen kann. Wenn die Aufgabe lautet, baue ein Auto mit drei Rädern anstatt vier, wird garantiert kein Flugzeug das fährt mit drei Rädern erwartet, obwohl es formal so definiert sein könnte.
 

TM69

Bekanntes Mitglied
Da hast du aber noch ein paar Hürden eingebaut, oder? Die Klasse heißt anders als ihr Konstruktor und in der main() wird noch eine andere Klasse instantiiert. ;)
Wenn du kein Prof, so wie ich war, sondern nur vom Dekan (seines Zeichens Prof. Dr. Dr.) beauftragt, hat man das Manuskript / Aufgaben des Profs. einzuhalten. So war es zumindest damals bei mir. Dieses soll allerdings absolut nicht heißen, dass es evtl. an anderen Unis anders ist. Ergänzend dazu sollte ich evtl. erwähnen es waren Studierende des 3. Semesters - sprich noch Anfänger. Natürlich hast du in solchen Kursen immer Leute, die bereits tiefgreifende Erfahrungen hat. Allerdings gebe ich dir zu bedenken, eine Kette ist nur so stark, wie das schwächste Glied.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Wenn du kein Prof, so wie ich war, sondern nur vom Dekan (seines Zeichens Prof. Dr. Dr.) beauftragt war, hat man das Manuskript / Aufgaben des Profs. einzuhalten. So war es zumindest damals bei mir. Dieses soll allerdings absolut nicht heißen, dass es evtl. an anderen Unis anders ist.
Er meinte deinen Beispielcode hier im Thread, nicht irgendeine Aufgabe die du vielleicht irgendwannmal gestellt hast.
 

temi

Top Contributor
Dann verstehe ich gerad nicht was du von mir willst

Java:
public class LinearCongruentialGenerator { // "LinearCongruentialGenerator"

    public static void main(String[] args) {
        SimpleRandom rand = new SimpleRandom(10); // "SimpleRandom"

    }

    public LCG(int max){ // "LCG"

    }

}
 

LucaToni

Aktives Mitglied
Java:
//Habe eine HashSet mit den bereits gespielten Liedern. Die ist leer am Anfang
//Hashset name ist absgepsielt
//ich möchte ein Lied zufällig wiedergeben, dafür erstelle ich mit Random eine ganzzahl
//die zufällige ganzzahl ist abspieleNr.
//Ich möchte das abgepsielte Lied in meine Hashset hinzufügen und dann das zufällige
//lied zurückgeben.


public Musikliste shuffle()
    {
        Random titelNr=new Random();
        int abspieleNr=titelNr.nextInt(lieder.size());
        if(abgespielt.containsAll(lieder))
        {abgespielt.clear();}
        abgespielt.add(lieder.get(abspieleNr));
        
        return lieder.get(abspieleNr);
        
    }

Warum funktioniert das nicht. -.-
 
K

kneitzel

Gast
Also du solltest etwas besser beschreiben, was nicht funktioniert.

Was ich jetzt vermute: Du willst nur Lieder spielen, die noch nicht abgespielt sind. Aber das macht Dein Code nicht:
Dein Code wählt ein beliebiges Lied aus lieder aus.
Desweiteren prüfst Du, ob alle Lieder aus lieder auch in abgespielt sind, dann würde abgespielt geleert.
Du fügst das gewählte lied zu abgespielt hinzu (könnte aber auch schon drin sein!)
Und du gibst das gewählte Lied zurück.

Aber die Logik wäre doch eher (mit Deinen Variablen):
- Du wählst so lange ein neues Lied aus, bis das gewählte Lied nicht in abgespielt ist. Hier würde sich eine do/while Schleife anbieten.
- Die Kontrolle, ob alle Lieder gespielt wurden, ist aber falsch. Das muss entweder am Anfang oder am Ende erfolgen.

==> Problem mit dem falschen Ort: Du hast nur noch ein Lied, dieses wird ausgewählt. Alle Lieder sind noch nicht gespielt. Nun fügst Du das Lied ein und beim nächsten Mal gibt es dann keine ungespielten Lieder mehr und Du hast eine Endlosschleife.

Der Algorithmus ist aber auch nicht gut. Stell Dir vor, du hast 10.000 Lieder und nur ein Lied ist noch nicht gespielt worden ... da kann die Schleife schon etwas laufen :)

Warum merkst Du Dir keine Playlist. Dann ist das abgespielt egal. Du hast also eine Playlist und wenn die leer ist, dann fügst Du alle Lieder ein. Ggf. mit einem shuffle Aufruf, damit du eine zufällig Reihenfolge hast. Gespielte Lieder entfernst Du und somit hast du nur noch eine Zufallszahl zu ermitteln.
 

LucaToni

Aktives Mitglied
Du hast es schon recht gut erfasst.
wie bekomme ich ein return aus der HashSet?

Das Problem ist ich bekomme momentan mit lieder.get() ein Lied aus der lieder ArrayList zurück. eigentlich will ich ja das Lied was gerade in die Hashset eigefügt wurde zurückbekommen. Habe jetzt auf die schnelle keine Methode gefunden, die mir elemente aus meiner Hashset zurückgibt....
 

mrBrown

Super-Moderator
Mitarbeiter
Warum willst du ein Lied aus dem HashSet bekommen - deinem Code und deiner Erklärung nach willst du etwas in das Set legen?

//ich möchte ein Lied zufällig wiedergeben, dafür erstelle ich mit Random eine ganzzahl
//die zufällige ganzzahl ist abspieleNr.
//Ich möchte das abgepsielte Lied in meine Hashset hinzufügen und dann das zufällige
//lied zurückgeben.

Das kann man doch einfach der Reihe nach abarbeiten:
* zufällige Nummer generieren
* Lied zu der Nummer raussuchen
* Lied in das Set legen
* Lied zurückgeben
 

LucaToni

Aktives Mitglied
Warum willst du ein Lied aus dem HashSet bekommen - deinem Code und deiner Erklärung nach willst du etwas in das Set legen?



Das kann man doch einfach der Reihe nach abarbeiten:
* zufällige Nummer generieren
* Lied zu der Nummer raussuchen
* Lied in das Set legen
* Lied zurückgeben

Das gelegte wieder zurückbekommen, da ja in einem Set keine Duplikate vorhanden sein können dachte ich wäre es die beste Lösung, damit ich kein Lied doppelt abspiele.
 

mrBrown

Super-Moderator
Mitarbeiter
Das gelegte wieder zurückbekommen, da ja in einem Set keine Duplikate vorhanden sein können dachte ich wäre es die beste Lösung, damit ich kein Lied doppelt abspiele.
Prüf doch einfach ob es schon im Set liegt, wenn du das vermeiden willst?

Oder entfern jedes schon gespielte aus der Liste der noch zu spielenden Lieder.
 

LucaToni

Aktives Mitglied
Prüf doch einfach ob es schon im Set liegt, wenn du das vermeiden willst?

Oder entfern jedes schon gespielte aus der Liste der noch zu spielenden Lieder.
verstehe ich nicht.
ich habe doch die ArrayList mit den Liedern.
dann habe ich noch die HashSet mit den abgepspielten Liedern.

mit abgepsielt.add().... füge ich doch der HashSet bereits die Lieder hinzu die abgespielt wurden.
Jetzt will ich einfach nur noch die Lieder der Hashset mit return zurückgeben.
 

LucaToni

Aktives Mitglied
Trenn dich von der Idee, irgendwas aus dem HashSet zu holen.
Du brauchst das Set nur, um Dinge reinzulegen und um zu prüfen, ob etwas drin ist.
Das Konzept ist blöd - Warum nicht auch gleich zurückgeben, wenn ich sowieso abfragen kann was drin ist, ist definitv nicht effizient?????!!!!!!!
einfach hashset.get<key> wäre doch viel besser, wie bei Listen. Jetzt muss ich mir überlegen wie ich das lösen kann.

Mit do....while geht es nicht so wie ich es will.... oder ich bekomme das nicht so hin.

Was ist mit einem Iterator? Kann man damit die Elemente rausholen?
 

lennero

Bekanntes Mitglied
Das Konzept ist blöd - Warum nicht auch gleich zurückgeben, wenn ich sowieso abfragen kann was drin ist, ist definitv nicht effizient?????!!!!!!!
einfach hashset.get<key> wäre doch viel besser, wie bei Listen. Jetzt muss ich mir überlegen wie ich das lösen kann.

Mit do....while geht es nicht so wie ich es will.... oder ich bekomme das nicht so hin.

Was ist mit einem Iterator? Kann man damit die Elemente rausholen?

Die Frage ergibt keinen Sinn. Du kannst nur Abfragen ob ein Objekt im Set vorhanden ist. Ein get(Object) würde dir das selbe Objekt zurückliefern.
 

mrBrown

Super-Moderator
Mitarbeiter
Das Konzept ist blöd - Warum nicht auch gleich zurückgeben, wenn ich sowieso abfragen kann was drin ist, ist definitv nicht effizient?????!!!!!!!
einfach hashset.get<key> wäre doch viel besser, wie bei Listen. Jetzt muss ich mir überlegen wie ich das lösen kann.
Erstmal: ein HashSet kennt keine Keys, es kennt nur die Elemente, die dann auch enthalten sind.
Genau deshalb macht ein get auch wenig Sinn: ein hashSet.get(xy) würde genau das Element zurück geben, welches du übergeben hast. Statt einem return hashSet.get(xy); kannst du also genauso einfach return xy; nutzen - die beiden sind gleichwertig.

Selbst wenn es ein get gäbe, wie sollte das in deinem Anwendungsfall helfen?
Wenn du vorher add aufrufst, gibt das get genau das Element zurück, welches du hinzugefügt hast - das get ist also überflüssig, das Element, welches du zurück bekommen würdest, hast du ja schon.
Wenn du vorher kein add aufrufst (und damit nicht weißt, ob das Element enthalten ist), kannst du einfach contains nutzen. Mehr Informationen würde dir ein get auch nicht liefern (das würde nämlich entweder null oder das Objekt, welches du ja bereits hast, zurückgeben - wäre dann sogar mehr Aufwand).

Also Ja: das Konzept ist blöd, in diesem Fall allerdings nicht das des HashSets.

Mit do....while geht es nicht so wie ich es will.... oder ich bekomme das nicht so hin.
Vermutlich letzteres, zeig doch mal deinen Code.

Was ist mit einem Iterator? Kann man damit die Elemente rausholen?
Ja, kann man. Und Nein, das ist in diesem Fall nicht sinnvoll. Das Element, welches du rausholen willst, hast du schon.
 

LucaToni

Aktives Mitglied
Mein Code war vollkommen richtig. Da hat nur was kleines gefehlt. Jetzt funktioniert es.

Ihr hättet mir ruhig sagen können dass alles an meinem Code RICHTIG ist, und mir eigentlich nur eine while-Schleife fehlt...

NAJAAAAA DANKE TROTZDEM ALLEN die mir versucht haben zu helfen.


Man sucht nach einer Lösung bei anderen, obwohl die eigene Lösung am nächsten zur eigentlichen Lösung ist....
 
K

kneitzel

Gast
Also schön, dass du eine funktionierende Lösung gefunden hast. Deine übrige Aussage würde ich etwas anzweifeln, aber vielleicht willst du uns Deine Lösung ja einmal zeigen ....
 

mihe7

Top Contributor
Mein Code war vollkommen richtig.
Welcher? Die shuffle-Methode aus #27? Nicht wirklich, zumal Du in #1 geschrieben hast, dass Du ohne Random auskommen musst. Die Methode gibt einfach ein x-beliebiges, zufällig gewähltes Lied zurück, mit einem Mischen (shuffle) hat das allerdings nichts zu tun. Natürlich kannst Du dafür so lange ein beliebiges Element suchen, bis Du eines findest, das bislang nicht gespielt wurde, das ist aber äußerst ineffizient.
 

LucaToni

Aktives Mitglied
Also schön, dass du eine funktionierende Lösung gefunden hast. Deine übrige Aussage würde ich etwas anzweifeln, aber vielleicht willst du uns Deine Lösung ja einmal zeigen ....

Code:
public Lied shuffle()
    {
        Random titelNr=new Random();
        
        
        int abspieleNr=titelNr.nextInt(lieder.size());
        
        
        if(abgespielt.containsAll(lieder))
        {
        abgespielt.clear();
        }
        
        while(abgespielt.contains(lieder.get(abspieleNr))) //Diese Schleife hat in meinem Code gefehlt.
        {
        abspieleNr=titelNr.nextInt(lieder.size());}
        abgespielt.add(lieder.get(abspieleNr));
        
        
       return lieder.get(abspieleNr);
        
        
}

Hab die Schleife kommentiert die gefehlt hat... alles andere hatte ich in #27 schon drin meine ich. Aber ich glaube jemand hatte mir einen ähnlichen Tipp gegeben..nur war der Tipp so verdeckt, dass ich vom Hinweis nicht direkt auf die while-Schleife gekommen bin...
 

mihe7

Top Contributor
Ja, darauf trifft alles zu, was ich in #44 geschrieben habe :)

Abgesehen davon wäre das mit einer do-while-Schleife schöner.
 

LucaToni

Aktives Mitglied
Der Thread heisst ja auch "ohne java.util.random"... Ich bin ein bisschen überrascht ab Zeile 3

Das war wohl in der Aufgabenstellung falsch. Da stand zunächst.. Benutzen Sie bei Ihrer Lösung kein Random-Object. Später wurde es korrigiert und die haben Benutzen Sie bei Ihrer Lösung ein Random-Object reingeschrieben. Wurde als Tippfehler in der Aufgabenstellung angegeben. Aber hab ja dann eine Lösung mit Random-Object gepostet. Sollte dann klar sein, dass ich es doch mit Random lösen. Shuffle-Methode von collections wollte ich implementieren bis der Hinweis kam, dass wir doch ein Random Object benutzen sollen. Dann bin ich wieder umgeschweift auf den random zufallszahlengenerierer.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Zufälliges Objekt basierend auf Wahrscheinlichkeiten bekommen. Java Basics - Anfänger-Themen 4
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
L Zufälliges 2d array befüllen Java Basics - Anfänger-Themen 27
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
Curtis_MC Collections Zufälliges Element aus Stack Java Basics - Anfänger-Themen 2
P Zufälliges Wort direkt aus einer Liste ausgeben Java Basics - Anfänger-Themen 9
M zufälliges Setzen von Schiffen in while klappt nicht immer Java Basics - Anfänger-Themen 3
StrikeTom Zufälliges Alphabet erzeugen Java Basics - Anfänger-Themen 6
M Zufälliges Auswählen von Textfields Java Basics - Anfänger-Themen 5
H zufälliges Array in ein 2D Array schreiben Java Basics - Anfänger-Themen 4
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
Rxiiz Objekt aus ComboBox entfernen Java Basics - Anfänger-Themen 4
I JSON in Objekt umwandeln Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
Say Objekt Java Basics - Anfänger-Themen 4
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
M BlueJ Objekt in Objektliste Java Basics - Anfänger-Themen 2
B Objekt in Klassendiagramm an fremdes Objekt weiterreichen? Java Basics - Anfänger-Themen 6
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
amelie123456 Objekt Farbe Quellcode Java Basics - Anfänger-Themen 4
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
J Hinzufügen eines Objektes in ein Objekt-Array Java Basics - Anfänger-Themen 62
O Warum bekommen wir nicht die Referenz vom zurückgegebenen Objekt? Java Basics - Anfänger-Themen 4
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
melaniemueller Fernseher als Objekt Java Basics - Anfänger-Themen 9
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
S Aufzurufendes Objekt Java Basics - Anfänger-Themen 3
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
N LocalTime einem Objekt zuweisen Java Basics - Anfänger-Themen 2
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
L Objekt an Methode übergeben Java Basics - Anfänger-Themen 4
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
J Y-Koordinate von GUI-Objekt bestimmen Java Basics - Anfänger-Themen 2
M Auf erstelltes Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 5
H Referenz Objekt aufrufen Java Basics - Anfänger-Themen 12
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
H Objekt aus einem Array löschen Java Basics - Anfänger-Themen 1
H Objekt im Array speichern Java Basics - Anfänger-Themen 2
H Objekt mit Methode erstellen Java Basics - Anfänger-Themen 6
H Objekt als Attribut speichern Java Basics - Anfänger-Themen 11
E Was kommt in ein Objekt und was in die Main Methode? Java Basics - Anfänger-Themen 8
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
W OOP Objekt Methode Java Basics - Anfänger-Themen 9
A Objekt in Arrayliste Java Basics - Anfänger-Themen 2
B Mit methode Objekt aus anderer Klasse erstellen Java Basics - Anfänger-Themen 6
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
M Objekt einer Klasse speichert die Veränderung nicht Java Basics - Anfänger-Themen 1
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
P Objekt aus String-Array erzeugen Java Basics - Anfänger-Themen 104
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
S Objekt-Attribute "variabel" gestalten Java Basics - Anfänger-Themen 10
J Datenbankstruktur als Objekt anlegen Java Basics - Anfänger-Themen 4
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
B Objekt an neue Stage übergeben? Java Basics - Anfänger-Themen 9
scratchy1 Wie deklariert man eine Methode, die ein Objekt zurückgeben soll? Java Basics - Anfänger-Themen 22
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
J Objekt erste freie Stelle zuweisen Java Basics - Anfänger-Themen 3
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
C Objekt soll ein Array sein. Java Basics - Anfänger-Themen 15
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben