Kezdőoldal » Számítástechnika » Programozás » Java-ban hogy lehetne ezt...

Java-ban hogy lehetne ezt megvalósítani?

Figyelt kérdés

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?


2015. márc. 26. 15:45
 1/10 Tengor ***** válasza:
100%

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.

2015. márc. 26. 15:53
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:

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... :/

2015. márc. 26. 19:50
 3/10 anonim ***** válasza:

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.

2015. márc. 26. 20:09
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:
100%
Fogsz egy ArrayList-et ciklussal beleteszed a 100 számot, majd megkevered a Collections.shuffle-lel. Az első 10 elem a kisorsolt számok, de mondhat bárki egyszerűbbet.
2015. márc. 26. 20:18
Hasznos számodra ez a válasz?
 5/10 A kérdező kommentje:

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);

2015. márc. 26. 20:48
 6/10 anonim ***** válasza:
ArrayList<Integer>-t használj nézz utána boxing/unboxingnak a Java-ban.
2015. márc. 26. 21:28
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:
Még mindig nem értem miért nem használsz halmazt (Set). Ez pont megfelelő arra. És amit írtam kód teljes egészében elvégzi az amit szeretnél.
2015. márc. 26. 21:34
Hasznos számodra ez a válasz?
 8/10 anonim ***** válasza:
Az egyik al a másik a1 és ez nem ugyanaz a név.
2015. márc. 26. 22:35
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:

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.)

2015. márc. 27. 15:57
Hasznos számodra ez a válasz?
 10/10 Tengor ***** válasza:

#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.

2015. márc. 28. 07:04
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!