To'siqlardan biri bo'lgan tasodifiy sonni qanday yaratishim mumkin [0,5,10,15]?

Quyidagilarni ishlatmoqdaman:

Random r = new Random(); 
var a = r.Next(9)

0-9 o'rtasida tasodifiy sonni yaratish.

Biroq hozir men tasodifan quyidagi raqamlardan birini yaratishim kerak: 0,5,10,15

Buni faqat yuqoridagi raqamlarni tanlash uchun o'zgartirishim mumkinmi?

0

7 javoblar

Random r = new Random(); 
var a = r.Next(4) * 5;

Hiyla qilmoq. Argumentlar eksklyuziv yuqori chegarasi ekanligini unutmang, shuning uchun u yaratilmaydi. Kod namunangiz 0 dan 8 gacha hosil qiladi.

Agar sizga boshqa raqamlar to'plamiga kerak bo'lsa, quyidagilarni qilishingiz mumkin:

int[] possible = new int[] { 0, 5, 10, 15 };
Random r = new Random(); 
int a = possible[r.Next(possible.length)];
6
qo'shib qo'ydi
Downvote, o'z javoblari ta'sirini kuchaytirishga umid qilgan kishidan bo'lishi mumkin
qo'shib qo'ydi muallif dreamlax, manba
Bu Richard Pompous III asariga o'xshaydi.
qo'shib qo'ydi muallif Jim Balter, manba
Menimcha, bu ularning sonini hisobga oladigan bo'lsa kerak. Afsuski, kimdir buni qila oladi.
qo'shib qo'ydi muallif Mike Precup, manba
Aaaand men ham pastga tushdim. Sharh? Bu erda uchta lavozimni hech qanday sababsiz tushirgan.
qo'shib qo'ydi muallif Mike Precup, manba
Random rnd = new Random();

//create a pre-defined list
int[] nums = new int[] {0, 5, 10, 15};

int rndNum = nums[rnd.Next(nums.Length)];

Ichakchani ketma-ketlikdagi aniqlangan sonlar majmuasidan birdan ortiq tasodifiy son yaratish uchun takrorlashingiz mumkin.

4
qo'shib qo'ydi
@downvoter - tushuntirish?
qo'shib qo'ydi muallif PaRiMaL RaJ, manba
@MikePrecup - yaxshi sintaksisi to'g'ri!
qo'shib qo'ydi muallif PaRiMaL RaJ, manba
Men pastga tushguvchi emasman, lekin sintaksis xatolaridan oldin sodir bo'ldim. Sizda bir nechta narsa bor, shuning uchun bu mumkin. EDIT: TGH ham urdi, shuning uchun ham o'ylamayman. Bu g'alati xabar. EDIT2: Va men ham. Bu aqldan nima?
qo'shib qo'ydi muallif Mike Precup, manba
Keyingi argumenti eksklyuziv yuqori chegara hisoblanadi.
qo'shib qo'ydi muallif Mike Precup, manba

0 dan 3 gacha tasodifiy sonni yarating, shundan so'ng uni oddiygina katalog sifatida foydalaning:

Bunga o'xshash narsa (pseudocode):

var nums = [0, 5, 10, 15];
return nums[new Random().Next(4)];

Yoki agar u chindan ham 5 marta ko'paygan bo'lsa; Oddiy multiplikatsiya:

return new Random().Next(4) * 5;
1
qo'shib qo'ydi
Keyingi (3) faqatgina 0, 1 yoki 2 bo'ladi
qo'shib qo'ydi muallif Jim Balter, manba

Ha. To'rtta raqamni to'rtta elementning qatoriga qo'ying. Keyin 0-3 orasida tasodifiy sonlarni hosil qiling va qatorni indeks uchun foydalaning

1
qo'shib qo'ydi
@TGH - har qanday u pastga tushdi!
qo'shib qo'ydi muallif PaRiMaL RaJ, manba
Bu aslida @ AppDeveloper ning echimi bilan bir xil. Faqat kod yo'q.
qo'shib qo'ydi muallif dotNET, manba
nega past ovoz berish kerak?
qo'shib qo'ydi muallif TGH, manba
const int iterator = 5;
const int upperBound = 15;

var possibleValues = (from n in Enumerable.Range(0, upperBound + 1)
                      where n % iterator == 0
                      select n).ToArray(); 

Random r = new Random();
var a = possibleValues[r.Next(possibleValues.Length)];
0
qo'shib qo'ydi
% Bosqichni o'z ichiga olmaydi, bir LINQ echimini bormi?
qo'shib qo'ydi muallif syclee, manba
Linq eritmasini topdi. Qani, oraliq haqida bilmaymiz
qo'shib qo'ydi muallif syclee, manba
Linq halidagi narsa qanday ko'rinishda bo'ladi?
qo'shib qo'ydi muallif syclee, manba
Ha, sen haqsan. Nima deb o'ylayman haha
qo'shib qo'ydi muallif syclee, manba
10 va 15 orasida vergulni qo'shing.
qo'shib qo'ydi muallif dotNET, manba
if (i% iterator == 0) - iterator tomonidan i ni oshirish uchun yaxshiroq (tezroq) bo'ladi. Yoki, zerafakat uchun, ehtimol buni Linq bilan bir qatorda qilishingiz mumkin.
qo'shib qo'ydi muallif Jim Balter, manba
Juda qimmat..
qo'shib qo'ydi muallif AgentFire, manba
public static IEnumerable Range(int count, int start = 0, int step = 1)
{
    for (int i = start; i < count; i++)
        yield return i;
}

var arr = Range(4, 0, 5).ToArray();//0, 5, 10, 15.
0
qo'shib qo'ydi
  Random r = new Random();
  var a = r.Next(4)*5;
0
qo'shib qo'ydi