C#在尝试创建随机数生成器时遇到解析错误

时间:2016-10-14 10:06:46

标签: c#

我正在尝试猜测数字'在uni中执行任务的游戏,我坚持(我认为)是一个解析问题。

在我运行程序之前它没有显示任何错误,但是当它到达某一点时(点击消息框后它退出并抛出可能的错误和解决方案)。

我确实想尝试自己解决这个问题,但我确实在各处都搜索了这个问题,但它没有给我一个确切的错误,所以我有点卡在搜索的内容上。

我已经包含了下面的代码以及错误屏幕截图的链接。

非常感谢,Rob

屏幕截图链接:screenshot

 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)
{

}

6 个答案:

答案 0 :(得分:1)

您应该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
}

答案 1 :(得分:1)

在查看屏幕截图时,您的txtbxInputNumber.Text是空的!那不是有效的Int。

您应该使用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!
}

答案 2 :(得分:0)

由于输入字符串为空,解析不会将其识别为数字,您应该添加条件

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,在这种情况下,必须首先实例化guess,因为它需要作为out参数

答案 3 :(得分:0)

它会抛出异常,因为输入不是数字。使用Int32.TryParse代替 BaseCollectionViewCell *cell; if (condition) { ChildCell *cell1 = (ChildCell *)[collectionView dequeueReusableCellWithReuseIdentifier:kCustomCell1Identifier forIndexPath:indexPath]; //call cell1's specific properties if needed. cell = (BaseCollectionViewCell *) cell1; } else { ChildCell2 cell2 = (ChildCell2 *)[collectionView dequeueReusableCellWithReuseIdentifier:kCustomCell2Identifier forIndexPath:indexPath]; //call cell2's specific properties if needed. cell = (BaseCollectionViewCell *) cell2; } //call common methods here.

Int32.Parse

答案 4 :(得分:0)

问题是当您尝试进入循环时,txtInputBox值为null。将输入框行放在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");
           }
        }
    } 

答案 5 :(得分:0)

而不是&#39; int.Parse&#39;尝试使用&#39; int.TryParse&#39;。

  int guess ;
  //int guess = int.Parse(txtbxInputNumber.Text); //Instead of this
  int.TryParse(txtbxInputNumber.Text, out guess ); //use this