Zufallselemente einer Liste ausgeben

Status
Nicht offen für weitere Antworten.

kulturfenster

Bekanntes Mitglied
Guten Morgen,
Ich würde gerne die Werte einer Liste in zufälliger Reihenfolge ausgeben. Wie kann ich das am besten tun?

hier mein Versuch:

Code:
for (int i = 1; i < 10; i++)
	list.add(i); // add zahlen von 1 bis 9.
int removeNumber = generator.nextInt(list.size()); // Zufallszahl zwischen 0 und List-Länge
return list.remove(removeNumber); // (hoffentlich) gültiger Zug
 
hmm, komisch.

hier nochmals die ganze Methode:
Code:
public int executeMove()
	{
		for (int i = 1; i < 10; i++)
			list.add(i); // add zahlen von 1 bis 9.
		int removeNumber = generator.nextInt(list.size()); // Zufallszahl zwischen 0 und List-Länge
		return list.remove(removeNumber); // (hoffentlich) gültiger Zug
	}

In der Main-Methode siehts wie folgt aus:

Code:
for (int i = 0; i < 10; i++) {
			System.out.println(moves.executeMove());
			}

und der Output:
6
1
4
6
4
2
8
8
9
4

Die 8 kommt beispielsweise also 2 mal vor.
 
Du kannst auch die Liste mischen und dann immer ein Objekt an einer Indexposition herausholen.

Code:
Collections.shuffle(list);
return list.get(0);
 
und zurück warum das andere nicht geht:
hast du gar keine Ambitionen, das selber herauszufinden?

gib doch mal die removeNumber mit System.out.println aus!
gib doch mal die Länge und den Inhalt der Liste nach dem remove in jedem Schleifendurchlauf aus!
(System.out.println(list) reicht schon als Ausgabe)
dann siehst du eher was passiert, vielleicht noch nicht warum, aber eben WAS passiert..

ich verrate es jetzt extra nicht (falls es dich überhaupt interessiert)
 
vielen Dank für die Tipps!

PS: Ich bin noch nicht lange in dem Zirkus, deshalb sind mir Fehleranalysen noch nicht so geläufig...
 
naja, dass man bei einer komplizierten Rechnung erstmal die Zwischenschritte prüfen sollte
und sich nicht nur starr über das falsche Endergebnis wundert,
das lernt man ja schon in der 5. Klasse in Mathe 😉

also Fehleranalyse ist eines der wichtigsten Dinge, bemühe dich da gleich von Anfang an 😉
 
ok, hab den Fehler nun gefunden: Jedes Mal, wenn die Methode gerufen wird, werden 10 neue Elemente angefügt. Mein Problem ist nun: Wie kann ich der ArrayList einmalig 10 elemente anfügen, wenn ich aber die Methode stets wieder rufen muss? Die einzige Lösung, die ich sehe, ist eine neue Methode zu schreiben. Gibt es keinen besseren Weg?

Code:
public void addElementsToList()
	{
		for (int i = 1; i < 10; i++)
			list.add(i); // add zahlen von 1 bis 9.
	}

nun beschwert sich aber die andere Methode, die list enthalte keine Elemente...
 
Nimm das mal als Vorlage:

Code:
import java.util.*;

public class Zufall {
	static Random generator = new Random();
	ArrayList<Integer> list = new ArrayList<Integer>();
	int anz = 10;
	
	public Zufall() {this(10);}
	public Zufall(int anz) {
		this.anz = anz;
		fillList();
	}
	public void fillList() {
		for (int i = 1; i <= anz; i++)
			list.add(i); // add zahlen von 1 bis anz.
	}
	
	public int executeMove() {
		int removeNumber = generator.nextInt(list.size()); // Zufallszahl zwischen 0 und List-Länge
		return list.remove(removeNumber); // (hoffentlich) gültiger Zug
	}

	public static void main(String[] args) {
		Zufall zuf = new Zufall();
		for (int i = 0; i < zuf.anz; i++) { 
			System.out.println(zuf.executeMove());
		}
	}
}
 
um wieder eher auf die Problemursache einzuzugehen
(@Leroy42, L-ectron-X: welchen Sinn hat es, alles mit fertigen Code überzubügeln?)

> Die einzige Lösung, die ich sehe, ist eine neue Methode zu schreiben. Gibt es keinen besseren Weg?

alles geht in Java, schreibe eine Operation die 10 Elemente einfügt und danach eine andere Operation die ein Element wieder entfernt oder was auch immer,

das sind getrennte Arbeiten, also gehören die auch in getrennte Operationen, nix schlimmes dabei, nix was man 'verbessern' müsste,
oder beschreibe die Probleme genauer
 
SlaterB hat gesagt.:
(@Leroy42, L-ectron-X: welchen Sinn hat es, alles mit fertigen Code überzubügeln?)

1. Es ist bereits Wochenende.
2. Dem OP solch einfache Sachen Schritt für Schritt interaktiv näherzubringen, würde zu lange dauern.
3. Ein "Aha"-Effekt kann manchmal Wunder bewirken und motivierend sein.
4. Es ist bereits Wochenende.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben