MrWilson Geschrieben 11. November 2011 Geschrieben 11. November 2011 Moin moin zusammen, ich wollte mal fragen, wie ihr einen zufälligen Wert aus einer ArrayList zurückgeben würdet. Ein Bekannter würde es so machen, jedoch verstehe ich das nicht ganz: int index = (int)Math.random() * arrayList.size()); if(index == arrayList.size()) { index--; } return arrayList.get(index); Könnte das jemand erläutern? =) Zitieren
Ganymed Geschrieben 11. November 2011 Geschrieben 11. November 2011 (bearbeitet) Zuerst wird eine Zufallszahl generiert. Dann wird geprüft, ob die Zufallszahl die Maximallänge der Liste hat. Ist das der Fall, würde beim Abfragen des Inhaltes mit get der Index überschritten werden und so wird dieser um einen herabgesetzt. (Weil size() von 1-x zählt; index allerdings von 0 an zählt). In allen anderen Fällen nimmt er sich den Index einfach so. Ich denke, ich würde das in sofern abändern, dass ich schon beim erzeugen der Zufallszahl nicht den Range sprenge und mir das if sparen kann. Bearbeitet 11. November 2011 von Ganymed Zitieren
Sacaldur Geschrieben 11. November 2011 Geschrieben 11. November 2011 unter der Annahme, dass an anderer Stelle bereits folgendes steht: Random r = new Random(); int index = arrayList.size(); return r.nextInt(index); bzw. in Kurz: return r.nextInt(arrayList.size()); es empfiehlt sich, das Random-Objekt nur ein einziges Mal zu erzeugen (beispielsweise als Membervariable) und dann immer wieder zu verwenden (in der jeweiligen Methode) du hast eine Klammer in der 1. Zeile vergessen zudem ist die Überprüfung überflüssig, wenn man sich die Dokumentation der Methode random durchgelesen hätte der richtige Code wäre also: int index = (int)(Math.random() * arrayList.size()); return arrayList.get(index); oder kurz return arrayList.get((int)(Math.random() * arrayList.size())); wenn du ein zufälliges Element einer Liste haben willst, musst du dir erste eine zufällige Zahl ermitteln lassen, die du dann als Index verwenden kannst, um an ein Element zu kommen in dem Fall deines Freundes hat er sich eine zufällige Fließkommazahl zwischen einschließlich 0 und ausschließlich 1 geholt, diese mit der Obergrenze der Liste multipiziert und das ergebnis abgebrochen (in eine Ganzzahl umgewandelt) wäre die zufällige Zahl eine 1, würde das Ergebnis der Multiplikation die Größe des Arrays sein, welches kein gültiger Index wäre da die größtmögliche zufällige Zahl in jedem Fall unter 1 liegt und durch das Umwandeln in eine Ganzzahl Nachkommastellen abgebrochen werden, ist der Wertebereich der aus der Rechnung hervorgehenden Zahlen 0..(Größe der Liste - 1) und somit immer ein gültiger Index bei meiner Variante verwende ich ein bereits vorhandenes Mittel, um eine Zahl in dem entsprechenden Wertebereich zu erhalten Zitieren
MrWilson Geschrieben 11. November 2011 Autor Geschrieben 11. November 2011 Wow, vielen Dank für die Hilfe! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.