我调试了我的代码(下面),发现问题是转换文本框中的文本的Convert()方法。但我如何解决这个问题?
我有一个类似问题的例子here。
代码:
//METHODS
static string RollDice (int dice)
{
Random roll = new Random();
int rollOutput = roll.Next(1, dice);
//NOTE: VERY IMPORTANT! EVERY TIME THE INPUT GOES INTO THIS
//METHOD REMEMBER TO INCREACE IT BY ONE!
//AND NEVER LET THE USER TO ROLL TO DICE QUICKLY ONE AFTER ANOTHER!
string rollResult = rollOutput.ToString();
return rollResult;
}
static void TwiceD20(int bonus, bool advantage)
{
string firstRollString = RollDice(21) + bonus;
string secondRollString = RollDice(21) + bonus;
int firstRoll = Convert.ToInt32(firstRollString);
int secondRoll = Convert.ToInt32(secondRollString);
switch(advantage)
{
case true:
if (firstRoll >= secondRoll)
{
MessageBox.Show(firstRollString);
}
else
{
MessageBox.Show(secondRollString);
}
break;
case false:
if (firstRoll <= secondRoll)
{
MessageBox.Show(firstRollString);
}
else
{
MessageBox.Show(secondRollString);
}
break;
}
}
//BUTTONS
private void btn1d20_Click(object sender, EventArgs e)
{
MessageBox.Show("Roll Result: " + RollDice(21));
}
private void btnAdv_Click(object sender, EventArgs e)
{
TwiceD20(Convert.ToInt32(textBox1d20.Text), true);
}
private void btnDisAdv_Click(object sender, EventArgs e)
{
TwiceD20(Convert.ToInt32(textBox1d20.Text), false);
}
答案 0 :(得分:1)
您已在字符串中添加了非int。所以很自然你无法将它转换为int,因为字符串不仅仅是一个int anymmore。
string firstRollString = RollDice(21) + bonus; // This won't convert back to an int
string secondRollString = RollDice(21) + bonus; // This won't convert back to an int
int firstRoll = Convert.ToInt32(firstRollString);
int secondRoll = Convert.ToInt32(secondRollString);
为RollDice的字符串结果添加奖励只是将字符串“True”或“False”附加到RollDice的结果中。我怀疑你认为它正在添加数字0或1。
我会像评论建议那样做,并让RollDice返回一个数字。然后你可以把它变成一个字符串,然后在你认为合适的时候操纵它。
或者,如果您不想返回任何内容,只需快速更改操作顺序即可。
int firstRoll = Convert.ToInt32(RollDice(21));
int secondRoll = Convert.ToInt32(RollDice(21));
string firstRollString = firstRoll + bonus;
string secondRollString = secondRoll + bonus;
但是,不确定您打算让代码执行什么操作,即使这可能对您不起作用。