Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Nachdem ich schon überall danach gesucht habe, aber irgendwie aus keinem Suchergebnis schlau geworden bin wollt ich einfach hier mal nachfragen.
Ich habe versucht eine Zahlenliste zu erstellen in dem 25 Zufallszahlen untereinander aufgereiht sind. Dies ist im Prinzip auch nicht sehr schwierig, doch sollte keine Zahl zwei Mal vorkommen. Diese Wiederholungen bekomm ich einfach nicht weg.
Vielleicht kann ja jemand einfach die nötige Ergänzung zu meinem Code posten, die nötig ist um dieses Problem zu beheben, oder vielleicht hat jemand ja auch einen eleganteren Lösungsweg.
Code:
import java.util.Random;
public class Zufallsliste
{
public void zufallsZahlenAusgeben()
{
Random zufallsgenerator;
zufallsgenerator = new Random();
for(int i=1; i<=25; i++)
{
int index = zufallsgenerator.nextInt(25);
System.out.println(index);
}
}
}
damit du keine wiederholungen kriegst musst du zuerst die zufallszahlen speichern,z.b. in einem array und dann nachgucken ob die zahl vorhanden ist.
Code:
import java.util.Random;
public class Zufallsliste
{
public void zufallsZahlenAusgeben()
{
Random zufallsgenerator;
zufallsgenerator = new Random();
int[] zufallszahlen = new int[25];//array fürdie zufallszahlen
for(int i=0; i<25; i++)
{
boolean doppelt = false; //hilfsvariable ob zahl doppelt ist
do {
int index = zufallsgenerator.nextInt(25);
//array durchlaufen und prüfen ob zahl schon vorhanden ist
for(int j = 0; j < i; j++) {
if(zufallszahlen[j] == index) {
doppelt = true;//zahl ist vorhanden, hilfsvariable auf true setzen
break; //schleife abbrechen
}
}
}while(doppelt);//wenn zahl doppelt ist nochmal neue zufallszahl generieren bis nicht mehr doppelt ist
System.out.println(index);
zufallszahlen[i] = index;//zahl ins array abspeichern
}
}
}
ich hab das ganze mal compilieren lassen und hab dann die variable "index" schonma vordeklariert, weil sie sonst in der while schleife unten nicht erkannt wird. beim ausführen jedoch hängt sich das ganze auf und zwar nach 10 zahlen bzw. er gibt nur 10 zahlen aus und arbeitet dann weiter... hab das ganze mit BlueJ probiert.
hm.. es könnte sein das nach 10 zahlen nur doppelte kommen aber das kann nicht wirklich sein
schau dir mal arraylist an, da könntest du einfach die zahlen 1 bis 25 hinzufügen und dann per Collections.shuffle(list) mischen, dann haste auch ne zufällige reihenfolge
Hi,
die oben vorgestellte Methode eine beliebige Kombination von Zahlen zu erhalten ist nicht gerade die eleganteste.
Entweder man geht den Umweg über die Collection oder man programmiert das selbst aus:
Die Idee dahinter ist, dass man sich alle vorkommenden Zahlen als Zahlenarray vorgibt und bloß die Positionen zufällig vertauscht.
Code:
int[] arr = new int[25];
for (int i=0; i<arr.length; i++) {
arr[i] = i;
}
Random gen = new Random();
int pos;
int hilf;
for (int i=0; i<arr.length; i++) {
pos = gen.nextInt(arr.length-i)+i;
hilf = arr[i];
arr[i] = arr[pos];
arr[pos] = hilf;
}
Das geht natürlich auch mit beliebigen Objektarrays.
jo ich habs jetzt mit dem shuffle gemacht und das funktioniert auch sehr gut
nur ergibt sich jetzt das problem das ich die ArrayList irgendwie nicht per knopfdruck in ein textfeld mit AWT schreiben kann... ich hab dann versucht das ganze in einen string zu konverten aber das scheitert :/
jo ich habs jetzt mit dem shuffle gemacht und das funktioniert auch sehr gut
nur ergibt sich jetzt das problem das ich die ArrayList irgendwie nicht per knopfdruck in ein textfeld mit AWT schreiben kann... ich hab dann versucht das ganze in einen string zu konverten aber das scheitert :/
wo haste denn probleme, zeig mal bischen code.
eigentlich ist das ganz einfach, mit einer for(each) schleife die liste durchlaufen und dann mit nem StringBuffer den String zusammen basteln.
jo also das ganze soll auf knopfdruck (mouse_clicked) geschehen..
Code:
ArrayList a = new ArrayList();
for ( int i = 1; i <= 25; i++ )
a.add( "" + i );
Collections.shuffle(a);
er erstellt also auf knopfdruck eine ArrayList und soll die dann mit hilfe von textFeld.setText(String); in das textfeld schreiben und das klappt nicht.. weil er angeblich keine ArrayList in ein AWT Textfeld schreiben kann :/
der rest mit der ArrayList funktioniert super & mit System.out.println ist das Ausgeben auch kein Problem
Warum sollte er auch eine ArrayList in ein Textfeld schreiben? Stell dir vor jemand füllt eine ArrayList mit hochkomplizierten Objekten, was soll das Textfeld mit denen machen? Die Methode setText(String) nimmt eben nur einen String an, kein StringBuffer, keine ArrayList<String> oder was auch immer. Du musst aus dem Inhalt deiner Collection also in einen String bringen, eben auf dem Weg, den SebiB90 schon angedeutet hat. Wie du auf die Element der ArrayList zugreifst, hast du ja anscheinend schon rausgefunden, du musst also bloß noch in Erfahrung bringen, wie man die einzelnen Elemente in einen String verknüpft.
Fürs erste kannst du es ja auch mit dem +-Operator von String machen, was allerdings nicht so performant ist, weil intern ein komplett neuer String erzeugt wird.
wie ich eben herausgefunden habe geht das alles doch viel einfach als ich gedacht habe
Code:
ArrayList a = new ArrayList();
String s = tFMannschaften.getText();
int anzahl = Integer.parseInt( s );
for ( int i = 1; i <= anzahl; i++ )
a.add( "" + i );
Collections.shuffle(a);
textAusgabe.setText(a.toString());
so habe ich eine variable anzahl und bekomme es auch in mein textfeld
ich bedanke mich trotzdem bei euch beiden für eure hilfe