Java-ban hogy lehetne ezt megvalósítani?
Annyi a lényeg, hogy mondjuk 1-100- ig szeretnék random sorsolni 10 számot, DE mindegyik szám egyedi legyen, tehát olyan, ami még előtte nem volt kisorsolva.
Próbálkoztam úgy, hogy amit egyszer már kisorsoltam, azt elmentem egy tömbbe, majd a következő sorsolás előtt megnézem, hogy van-e már olyan elem ebben a tömbben, amit akkor sorsoltam, de valamiért nem működöt...
Hogy lehetne megcsinálni a lehető legegyszerűbben?
A Javaban van halmaz (set) adatszerkezet, ami azt tudja, hogy egy értéket csak egyszer tárol.
Fogj egy halmazt, fogj egy do-while ciklust. A ciklus fusson addig amíg a halmaz mérete nem éri el a 10-et. A magban pedig generálj egy random számot és dobd bele a halmazba.
Ha olyan számot generálsz, ami már van a tömbben, akkor nem fog nőni a halmaz mérete.
Konkrét leírást vagy példát tudsz adni rá?
Csak semmitmondó, példa nélküli leírásokat találtam róla, amik leírják ezt(hogy csak 2x tartalmazhat egy elemet), de semmilyen példát nem láttam a megvalósítására, így elindulni se tudok vele... :/
public HashSet<Integer> generateNumbers(int n) {
HashSet<Integer> collection = new HashSet<>();
do {
int i = randInt(1, 100);
collection.add(i);
} while (collection.size() != n);
}
private int randInt(int min, int max) {
Random r = new Random();
return r.nextInt((max - min) + 1) + min;
}
Ennek mennie kell. Egy for-each ciklussal végig tudsz menni a visszaadott set elemein.
Utolsó:
Ezzel mi a gond?
Az "a1+ -et aláhúzza pirossal az utolsó sorban... :S
ArrayList al = new ArrayList(100);
for(int k=0; k<100;k++){
al.add(k);
}
Collections.shuffle(a1);
Tengor kolléga! (Bocsánat, a többieket nem olvastam)
Én inkább a másik irányból közelíteném a dolgot, mivel véges értékkészletünk van. A te megoldásod esetén előfordulhat, hogy az utolsó számon éveket fog gondolkodni a vas. :)
Fogj hát egy listát, töltsd fel számokkal 1-től 100-ig, majd 10 alkalommal "biszbasz = available.remove(random.nextInt(available.size()))"
Ezzel így garantálva van, hogy csak olyan véletlenszerű értéket kaphatsz, amely még nem volt.
A másik, mégegyszerűbb megoldás, ha magát a számokat tartalmazó listát kevered össze a Collections API segítségével, aztán fogod az első 10 értéket és voilá.
@Kérdező: Lehetőség szerint kerüld a tömbök használatát. Viszonylag ritkán adnak jobb megoldást valamire, mint más lehetőségek (listák, halmazok, stb.)
#9, teljesen igazad van, sőt, arra is van esély, hogy a második számot sem fogja soha megtalálni, mert mindig ugyan azt az egy számot sorsolja.
Mentségemre legyen mondva, hogy elég házifeladat szagú a dolog, valószínűleg a halmazos megoldás is max pontot érne.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!