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.
OOPAus Vektor zufällig einen Eintrag wählen und in Array[][] schreiben
ich habe eine ArrayList<Integer> alle, und einen int[j] stundenplan.
Ich möchte nun einen zufällig gewählten Eintrag aus alle nehmen, und diesen in einen ebenfalls zufällig gewählten freien Slot in stundenplan einfügen.
Das soll mit allen Einträgen aus alle geschehen (in stundenplan ist mehr als genug Platz). Danach soll jeder Slot in stundenplan der nicht mit einem Eintrag aus alle belegt wurde (also leer ist), mit dem Wert "-1" belegt werden. Voila.
Java:
Random r = new Random();
for (int i = 0; i < stundenplan.length; i++) {
if (alle.size() > 0) {
for (int j = 0; j < stundenplan[i].length; j++) {
int gr = alle.size();
int pos = r.nextInt(gr);
stundenplan[i][j] = alle.get(pos);
alle.remove(pos);
}
}
Ich habe es bereits probiert, damit sind nicht alle oben stehenden Bedingungen erfüllt. Aber so bekomme ich für das "gr" in Zeile 6 den Fehler, dass n positiv sein muss. Das gr wird aber niemals negativ.
Randbemerkung: Ich entferne aus alle jeden Eintrag der genommen wurde, damit ich diesen nicht nochmal nehme. Kann man das anders lösen, dass jeder Eintrag weiterhin nur 1 mal genommen wird, aber die Einträge in allenicht gelöscht werden müssen?
Ah ich ***, ich habe den Fehler übersehen, if (alle.size() >= 1) war in der falschen for-schleife:
Java:
Random r = new Random();
for (int i = 0; i < stundenplan.length; i++) {
for (int j = 0; j < stundenplan[i].length; j++) {
if (alle.size() >= 1) {
int gr = alle.size();
System.out.println("gr: "+gr);
int pos = r.nextInt(gr);
stundenplan[i][j] = alle.get(pos);
alle.remove(pos);
}
}
}
Nächster Punkt wäre nun, dass Füllen von zufällig gewählten Slots in stundenplan, weil er füllt jetzt der Reihe nach auf...
//Differenz aus Größe des 2D-Arrays und den Elementen
//In die Differenzslots wird -1 aufgefüllt
int diff = timeslots*anzRaeume-alle.size();
//Erweitert alle-Array um die leeren Slots und füllt sie mit -1
for (int i = 0; i < diff; i++) {
alle.add(-1);
}
//Mischt die alle-Array zufällig
Collections.shuffle(alle);
//Füllt den Stundenplan mit den zufälligen Werten aus alle-Array
for (int i = 0; i < stundenplan.length; i++) {
for (int j = 0; j < stundenplan[i].length; j++) {
stundenplan[i][j] = alle.get(0);
alle.remove(0);
}
}
So hab ich nen zufälligen Stundenplan, alle Lücken wurden wie gewünscht mit -1 gefüllt, und eine Kopie der "alle" Liste liegt bei