C# random számok ismétlés nélkül ?
Generálásnál szerintem nem tudod kizárni az ismétlődést, de addig ismételheted a generálást amíg a tömb tartalmazza a generált számot.
Contains() metódussal meg tudod nézni hogy tartalmazza-e, ha nincs benne hozzáadod, ha benne van generálsz egy másikat, ismételd addig amíg nem találsz olyan számot ami még nincs benne.
List<int> listNumbers = new List<int>();
int number;
for (int i = 0; i < 6; i++)
{
do {
number = rand.Next(1, 49);
} while (listNumbers.Contains(number));
listNumbers.Add(number);
}
using System.Linq;
int[] uniqueNums=randomNums.Distinct().ToArray();
Erre több módszert is lehet találni.
Az általánosan használható technika az, hogy generálás után ellenőrzöd, hogy szerepelt-e az adott szám, és ha igen, akkor újra generálod. Főiskolán - egy lottószámsorsoló program kapcsán - ezért én nem kaptam maximális pontot, mondván "elméletileg lehet, hogy nagyon sokszor, akár végtelen sokszor ugyanazt a véletlenszámot kapom, és olyankor ez a megoldás nem működik". Ennek persze a valószínűsége kisebb, mint hogy én egy évben 52-szer nyerjem meg a lottóötöst, de tény, hogy ha véges mennyiségű értékből kell generálni, akkor van rá szebb módszer is: veszel egy tömböt, és feltöltöd a lehetséges elemekkel. (Lottószámsorsolás esetén 1-től 90-ig egész számokkal.) És nem magát a véletlenszámot generálod, hanem a tömbelem indexét. Ezután pedig azt az elemet törlöd a tömbből. (Így a maximális index is kisebb lesz.) Tehát az indexet választod ki random, és nem a konkrét értéket.
Nem próbáltam ki, lehet hogy elírtam valamit de az elv ez lenne
Ez feltölt egy 10 elemű tömböt egyedi számokkal
További kérdések:
Minden jog fenntartva © 2025, 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!