Zum Inhalt springen

Zufälligen Wert aus ArrayList zurückgeben


Empfohlene Beiträge

Geschrieben

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? =)

Geschrieben (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 von Ganymed
Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...