我正在嘗試創建一個彩票生成器,其中我有 5 個數字(從 1 到 50)和 2 個其他數字(從 1 到 12)稱為星星。五個數字不能相同,2 星也不能相同(但可以等于數字)。我必須在 c# 中撰寫代碼并放入帶有 ViewBag 的 cshtml 頁面。我的輸出以某種方式給了我這個:輸出
我的 C# 代碼是:
Random random = new Random();
int number = random.Next();
int[] numbers = new int[5];
int[] stars = new int[2];
bool repeated = false;
int newnumber = 0;
for (int i = 0; i < 5; i )
{
repeated = false;
while (repeated == true)
{
newnumber = random.Next(1, 50);
repeated = numbers.Contains(newnumber);
}
numbers[i] = newnumber;
}
ViewBag.numbers = numbers;
for (int i = 0; i < 2; i )
{
repeated = false;
while (repeated == true)
{
newnumber = random.Next(1, 12);
repeated = stars.Contains(newnumber);
}
stars[i] = newnumber;
}
ViewBag.stars = stars;
return View("MyView");
然后我把它放在cshtml中,讓它出現在我的網站上:
<div class="card" style="width: 400px; height: 125px; margin: auto">
<div class="bg-light">
<h3 style="text-align:center">Lottery</h3>
<p style="text-align:center">Winning numbers!</p>
<p style="text-align:center">
No:@for (int i=0; i <5;i )
{
@Html.Raw(ViewBag.numbers[i] ";")
}
|
<i class="bi bi-star-fill"></i>:@for (int i=0; i <2;i )
{
@Html.Raw(ViewBag.stars[i] ";")
}
</p>
</div>
</div>
你們能幫幫我嗎?我真的不知道讓彩票只有零的錯誤在哪里。
謝謝你。
uj5u.com熱心網友回復:
這里:
repeated = false;
while (repeated == true)
它總是會跳過while。
uj5u.com熱心網友回復:
您分配重復 == false 所以它永遠不會進入 while 回圈。更改代碼以在它應該適合您的情況下執行。
do
{
//Create random number
//Check whether it's repeated
newnumber = random.Next(1, 12);
repeated = stars.Contains(newnumber);
}while (repeated == true);
uj5u.com熱心網友回復:
如果有重復,重新生成數字不是很有效。嘗試這個:
var random = new Random();
var allNumbers = Enumerable.Range(1, 50);
var stars = allNumbers
.OrderBy(x => random.Next())
.Take(2)
.ToArray();
var numbers = allNumbers
.Except(stars)
.OrderBy(x => random.Next())
.Take(5);
uj5u.com熱心網友回復:
有兩種典型的方法可以k從 中創建唯一亂數n:
1.創建所有n數字,洗牌然后取出k它們(這種方法在 時有效k ~ n):
// Simplest, Fisher-Yates algorithm is faster
// https://en.wikipedia.org/wiki/Fisher
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/453503.html
標籤:C# html asp.net-mvc 剃刀
下一篇:從多對多關系表中查詢
