Veröffentlicht 11. November 201113 j 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? =)
11. November 201113 j 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 201113 j von Ganymed
11. November 201113 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.