我需要使用ASP.NET将一些“经典ASP 3.0”代码转换为C#:
Randomize()
intUP = 9
intLow = 1
intRange = intUp - intLow
intRandom = CInt ((intRange * Rnd()) + intLow)
Response.Write(intRandom & "<br /><br />")
for i = 1 to (num) + intRandom
Response.Write(intRandom & "<br />")
next
我尝试过这段代码:
int count;
Random rnd;
protected void Page_Load(object sender, EventArgs e)
{
rnd = new Random();
count = GetRandomInt(1, 9);
for (int i = 0; i < count; i++)
{
Response.Write(count.ToString());
}
}
protected int GetRandomInt(int min, int max)
{
return rnd.Next(min, max);
}
但在Classic ASP 3.0中,最大输出为9,但在C#和ASP.NET中,它要高得多。
我错过了什么?
这段代码出了什么问题?
提前谢谢。
答案 0 :(得分:2)
实际上C#代码中的最大数字是较低的,但是你要背靠背地写这些数字,所以它们显示为一个大数而不是单独的数字。
Random.Next
方法返回的数字至少与第一个参数一样高,并且低于第二个参数。拨打rnd.Next(1, 9)
会给你1到8之间的数字。
你是从零开始循环,最多比随机数小一个。当您在循环中写入这些数字时,它们之间没有任何内容,最大值的输出将是:
01234567
原始代码会将其写为最大值:
9
1
2
3
4
5
6
7
8
9
要获得min
和max
之间的随机数,请在max
中添加一个:
return rnd.Next(min, max + 1);
从一个而不是零循环,包括结束值,并在数字之间放置一些东西:
for (int i = 1; i <= count; i++)
{
Response.Write(count.ToString() + "<br />");
}
注意:原始代码中的随机计算实际上是不正确的,因为它会生成最低和最高值的一半,与其他任何数字一样频繁。正确的实施将是:
intRange = intUp - intLow + 1
intRandom = Int((intRange * Rnd()) + intLow)
C#代码模仿正确的实现,而不是错误的实现。