我在做足球比赛。为了得到一个触地得分,你必须获得100码。我有public static int yardsLeft = 100;。它经过一圈,每过一圈就有那么多码。一旦yardsLeft = 0退出,它就会退出。我很难弄清楚如何在最后(触地得分)得到码数,精确到100码。
我有这个:
if (Program.yardsLeft >= 80)
{
if (Program.chance >= 1 && Program.chance <= 5)
Program.gained = Program.r.Next(80, (100 + 1));
else if (Program.chance >= 6 && Program.chance <= 12)
Program.gained = Program.r.Next(60, (79 + 1));
else if (Program.chance >= 13 && Program.chance <= 24)
Program.gained = Program.r.Next(20, (59 + 1));
else if (Program.chance >= 25 && Program.chance <= 100)
Program.gained = Program.r.Next(1, (19 + 1));
}
else if (Program.yardsLeft <= 79 && Program.yardsLeft >= 60)
{
if (Program.chance >= 1 && Program.chance <= 10)
Program.gained = Program.r.Next(60, 80);
else if (Program.chance >= 11 && Program.chance <= 30)
Program.gained = Program.r.Next(20, 60);
else if (Program.chance >= 31 && Program.chance <= 100)
Program.gained = Program.r.Next(1, 20);
}
else if (Program.yardsLeft <= 59 && Program.yardsLeft >= 40)
{
if (Program.chance >= 1 && Program.chance <= 10)
Program.gained = Program.r.Next(40, 60);
else if (Program.chance >= 11 && Program.chance <= 30)
Program.gained = Program.r.Next(20, 40);
else if (Program.chance >= 31 && Program.chance <= 100)
Program.gained = Program.r.Next(1, 20);
}
else if (Program.yardsLeft <= 39 && Program.yardsLeft >= 20)
{
if (Program.chance >= 1 && Program.chance <= 10)
Program.gained = Program.r.Next(30, 40);
else if (Program.chance >= 11 && Program.chance <= 30)
Program.gained = Program.r.Next(10, 30);
else if (Program.chance >= 31 && Program.chance <= 100)
Program.gained = Program.r.Next(1, 10);
}
else if (Program.yardsLeft <= 19)
{
if (Program.chance >= 1 && Program.chance <= 10)
Program.gained = Program.r.Next(15, 20);
if (Program.chance >= 11 && Program.chance <= 30)
Program.gained = Program.r.Next(10, 15);
if (Program.chance >= 31 && Program.chance <= 100)
Program.gained = Program.r.Next(1, 10);
}首先,它检查yardsLeft是否超过80码,如果是,它有机会获得这么多码(最多100码),但是,如果第一次通过,它不会超过20码(继续到下一次检查else if (Program.yardsLeft <= 79 && Program.yardsLeft >= 60),它将直接返回到else if (Program.yardsLeft <= 79 && Program.yardsLeft >= 60),并再次添加导致100码的东西,这意味着最终的结果将超过100码。
示例
if (yardsLeft is 80 or more)
{
// generate number somewhere through 60-80 (not ever exceed 100)
// generate number somehwere between 20-60 (not ever exceeding 100
// generator number somewehere between 1-20 (not ever exceeding 100)
}
else if (yardsLeft is between 60-20)
{
// generate number somewhere through 40-60 (not ever exceed 100)
// generate number somehwere between 20-40 (not ever exceeding 100
// generator number somewehere between 1-20 (not ever exceeding 100)
}最终结果CAN NOT超过100。这就是我想说的。每次它循环,我想要它产生一些数字,在最后,永远不会超过100。
发布于 2015-09-01 16:49:45
一个简单的解决方案是将这个块放在代码的其余部分之后:
Program.gained = Math.Min(Program.gained, Program.yardsLeft);这意味着,如果所获得的码数大于达到0所需的码数,则它将被设置为所剩的码数。因此,当您稍后(大概)通过Program.yardsLeft减少Program.gained时,它不会低于0。
基础知识:Math.Min返回给定参数的最小值。此语句根据先前代码中给出的值将Program.gained设置为一个新值。这“夹紧”了Program.gained的值,使其低于yardsLeft。下面是一个简单的用法:
int yardsYouCanRun = 112;
int yardsYouTraveled = Math.Min(yardsYouCanRun, 100);
// yardsYouTraveled is Math.Min(112, 100), which is 100.
int yardsICanRun = 15;
int yardsITraveled = Math.Min(yardsICanRun, 100);
// yardsITraveled is Math.Min(15, 100), which is 15.这代表了一种情况,你可以跟踪你可以从零跑出的码数,但是要把它限制在100,因为这是你可以跑的最大距离。两者的最小距离是跑的距离。正如你所看到的,你可以跑完全程,但我只能跑15码,所以你得到了100码的触地得分,但我只跑到了15码线。这是“夹紧”yardsXCanRun值低于100码。
这与前面的代码行相同,但与您或我可以运行的100码不同,您只能运行Program.yardsLeft。
发布于 2015-09-01 14:43:03
我想你想要的是:
if (Program.yardsLeft >= 80)
{
if (Program.chance >= 1 && Program.chance <= 5)
Program.gained = Program.r.Next(80, (100 + 1));
else if (Program.chance >= 6 && Program.chance <= 12)
Program.gained = Program.r.Next(60, (79 + 1));
else if (Program.chance >= 13 && Program.chance <= 24)
Program.gained = Program.r.Next(20, (59 + 1));
else if (Program.chance >= 25 && Program.chance <= 100)
Program.gained = Program.r.Next(1, (19 + 1));
}
else if (Program.yardsLeft <= 79 && Program.yardsLeft >= 60)
{
if (Program.chance >= 1 && Program.chance <= 10)
Program.gained = Program.r.Next(60, 80);
else if (Program.chance >= 11 && Program.chance <= 30)
Program.gained = Program.r.Next(20, 60);
else if (Program.chance >= 31 && Program.chance <= 100)
Program.gained = Program.r.Next(1, 20);
}
else if (Program.yardsLeft <= 59 && Program.yardsLeft >= 40)
{
if (Program.chance >= 1 && Program.chance <= 10)
Program.gained = Program.r.Next(40, 60);
else if (Program.chance >= 11 && Program.chance <= 30)
Program.gained = Program.r.Next(20, 40);
else if (Program.chance >= 31 && Program.chance <= 100)
Program.gained = Program.r.Next(1, 20);
}
else if (Program.yardsLeft <= 39 && Program.yardsLeft >= 20)
{
if (Program.chance >= 1 && Program.chance <= 10)
Program.gained = Program.r.Next(30, 40);
else if (Program.chance >= 11 && Program.chance <= 30)
Program.gained = Program.r.Next(10, 30);
else if (Program.chance >= 31 && Program.chance <= 100)
Program.gained = Program.r.Next(1, 10);
}
else if (Program.yardsLeft <= 19 && Program.yardsLeft !>= 100)
{
if (Program.chance >= 1 && Program.chance <= 10)
Program.gained = Program.r.Next(15, 20);
if (Program.chance >= 11 && Program.chance <= 30)
Program.gained = Program.r.Next(10, 15);
if (Program.chance >= 31 && Program.chance <= 100)
Program.gained = Program.r.Next(1, 10);
}
else
{return;}//return the value if over 100只是你没有提出任何理由来检查在决赛中剩下的场地是否超过了100码。
另一种方法是使用.yardsLeft来实现随机动态,这只会让你得到100,再也不会有任何东西了。
if (Program.chance >= 31 && Program.chance <= 100)
Program.gained = Program.r.Next(1, program.yardsLeft);https://stackoverflow.com/questions/32333268
复制相似问题