C#在尝试生成随机数生成器时遇到解析错误
本文关键字:遇到 错误 随机数生成器 | 更新日期: 2023-09-27 18:13:07
我正试图为uni中的一项任务制作一个"猜测数字"游戏,但我一直在思考(我认为(是一个解析问题。
在我运行程序之前,它不会显示任何错误,但当它到达某个点时(单击消息框后,它会退出并抛出可能的错误和解决方案(。
我确实想自己尝试解决这个问题,我确实到处搜索了这个问题,但它并没有给我一个确切的错误,所以我有点拘泥于搜索什么。
我已经包含了下面的代码和错误截图的链接。
非常感谢Rob
截屏链接:截屏
private void btnGenerate_Click(object sender, EventArgs e)
{
Random gen = new Random();
int randNumber = gen.Next(1, 1000);
lblWelcome.Text = ("");
btnGenerate.Visible = false;
MessageBox.Show("The computer has picked a number and stored it, please continue and guess the number");
txtbxInputNumber.Visible = true;
int guess = int.Parse(txtbxInputNumber.Text);
while (guess != randNumber)
{
if (guess < randNumber)
{
MessageBox.Show("Try higher");
}
else
{
MessageBox.Show("Try lower");
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
您应该从用户处TryParse
您的输入,但这并不总是有效的数字
int guess = 0;
int.TryParse(txtbxInputNumber.Text, out guess);
如果你愿意,你可以显示一个错误,这样他就知道他犯了一个错误
int guess = 0;
if(!int.TryParse(txtbxInputNumber.Text, out guess))
{
//show error message
return; // quit the method
}
当我看到屏幕截图时,您的txtbxInputNumber.Text
是空的!这不是有效的国际
您应该使用,int.TryParse()
int guess;
if(int.TryParse(txtbxInputNumber.Text, out guess))
{
// the guess is a valid int!
}
else
{
// the guess is not a valid int!
}
由于输入字符串为空,解析无法将其识别为数字,因此应添加条件
int guess = int.Parse(txtbxInputNumber.Text == "" ? "0" : txtbxInputNumber.Text);
这与使用if是一样的,尽管if语句有一个额外的好处,你可以返回一个错误
if(txtbxInputNumber.Text == "")
{
MessageBox.Show("Try higher");
return;
}
else
{
int guess = int.Parse(txtbxInputNumber.Text);
}
你也可以将输入限制为数字,这样它就会自动在中有一个数字
另一种选择是使用TryParse,在这种情况下,猜测必须首先实例化,因为它需要作为输出参数
它抛出一个异常,因为输入不是数字。使用Int32.TryParse而不是Int32.Parse
。
int guess;
if (!Int32.TryParse(txtbxInputNumber.Text, out guess))
MessageBox.Show("Enter a number");
问题是,当您尝试进入循环时,txtInputBox值为null。将inputbox行放在while循环中,并添加一个非null复选框。应该这样工作:
int guess = 0;
while (guess != randNumber)
{
if !string.IsNullOrEmpty(txtbxInputNumber.Text)
{
guess = int.Parse(txtbxInputNumber.Text);
if (guess < randNumber)
{
MessageBox.Show("Try higher");
}
else
{
MessageBox.Show("Try lower");
}
}
}
尝试使用"int.TryParse"而不是"int.Parse"。
int guess ;
//int guess = int.Parse(txtbxInputNumber.Text); //Instead of this
int.TryParse(txtbxInputNumber.Text, out guess ); //use this