我有一个简单的程序,该程序使用Random和for循环来生成两个六位数字。循环每次都会生成两个数字,大多数情况下,两个数字都是六位数。但是,有时其中一个数字少于6位数字(4到5位数字)。在所有情况下,它都不会生成错误消息。这是怎么回事?我已经发布了所有代码,尽管其中一些尚未使用/经过测试,直到我找出随机问题为止。
六位数字以空字符串开头。 Random生成一个整数,该整数将转换为字符串,然后将+ =转换为六位数的数字字符串,该方法完成后将转换为整数。
该程序的其余部分尚未实现,将涉及提取每个数字中的第二,第四和第六位数字并将它们加在一起。麻烦的是随机问题。
static void Main(string[] args)
{
Numbers theNumbers = new Numbers();
Console.WriteLine(string.Join(",", theNumbers.Ints[0]));
Console.WriteLine(string.Join(",", theNumbers.Ints[1]));
}
数字类
class Numbers
{
public int[] Ints { get; set; }
public Numbers()
{
Ints = new int[5];
CreateTheFirstTwoNumbers(new RandomNummberGenerator());
}
public int[] CreateTheFirstTwoNumbers(RandomNummberGenerator RNG)
{
for (int arrayIndex = 0; arrayIndex < 2; arrayIndex++)
{
Ints[arrayIndex] = RNG.CreateRandomNumber();
}
return Ints;
}
随机数生成器类
class RandomNummberGenerator
{
public Random Generator { get; set; }
public RandomNummberGenerator()
{
Generator = new Random();
}
public int CreateRandomNumber()
{
string number = "";
for (int numberIndex = 0; numberIndex < 6; numberIndex++)
{
number += Generator.Next(0, 10).ToString();
}
return int.Parse(number);
}
}
答案 0 :(得分:2)
您正在生成一个六个字符的字符串,其中每个字符都是0到9(含0和9)之间的数字,然后将该字符串解析为整数。如果第一个字符为'0'
,则您将拥有一个包含五位数字的数字(如果有更多的前导零,则为更少的数字)。如果您想保证一个六位数的数字,那么您的第一位数应该是1-9,而不是0-9。
如果您还没看过,我建议您阅读how to debug small programs上Eric Lippert的博客文章。
答案 1 :(得分:2)
有一种更简单(更正确,并且当然需要更少的代码)解决方案来生成随机数,并将其转换为6个字符的字符串
var rng = new Random();
var number = rng.Next(1000000); // generates a number between 0 and 999999
// (maxValue is exclusive upper bound)
var numberAsString = number.ToString("000000");
如果数字不能以前导零开头,请生成一个介于100000和999999之间的随机数:
var number = rng.Next(100000, 1000000);
答案 2 :(得分:0)
除非您犯了语法错误,否则不会收到错误消息。您很可能有语义错误。如果我不得不猜测,我会说您的第一个数字有时会被生成为零。
答案 3 :(得分:0)
问题是当您将生成的数字转换为int
时。
您的CreateRandom()
函数有时会创建以0(zero)
开头的数字,因此当您转换为int,float等数字类型时,将忽略左侧的零。
因此,如果在转换为int时生成012345
,则会得到12345
,因为左侧的0被禁止了。
如果您想要一个六位数的数字,请确保第一位数不是0
。
答案 4 :(得分:0)
您的循环实际上正在工作。当前导数字为0
时,您得到的数字更少。
您可以使用以下格式强制显示六位数字
string s = number.ToString("000000");
例如,对于123
,结果为"000123"
。
输出内容:
string s = String.Join(", ", theNumbers.Ints.Select(i => i.ToString("000000")).ToArray());
Console.WriteLine(s);