Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Zufälligen Wert aus ArrayList zurückgeben

Empfohlene Antworten

Veröffentlicht

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

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

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

Wow, vielen Dank für die Hilfe!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.