如何将字符串更改为整数以用于for循环
本文关键字:整数 用于 for 循环 字符串 | 更新日期: 2023-09-27 18:24:32
我一直在做C++,但最近我开始在C#Windows窗体应用程序上做更多的工作,我正在制作一个程序,你可以输入一个数字,它可以翻转硬币那么多次。这是我迄今为止的代码:
private void flipCoin_Click(object sender, EventArgs e)
{
Random rnd = new Random();
String HorT;
int randomizer;
for (int i = 0; i <= int.Parse(flipCoin.Text); i++)
{
randomizer = rnd.Next(1, 2);
if (randomizer == 1)
{
HorT = "Heads";
}
else
{
HorT = "Tails";
}
richTextBox1.AppendText(Environment.NewLine + HorT);
}
}
我做错了什么?
我在您的代码中看到两个问题。
首先,如果用户键入的不是整数(或者根本没有键入任何内容),则Parse调用将抛出异常,如果可以的话,最好避免出现异常。
第二,对于循环,循环时间太长,你从零开始,停止在限制小于1 的地方
所以你可以把你的代码改成
private void flipCoin_Click(object sender, EventArgs e)
{
Random rnd = new Random();
String HorT;
int randomizer;
int count;
// Int32.TryParse return false if the input is not an integer
if(!Int32.TryParse(flipCoin.Text, out count))
{
MessageBox.Show("Please type an integer number");
return;
}
// Loop until the indexer is less than the limit
for (int i = 0; i < count); i++)
{
....
编辑
刚刚注意到这条线上的另一个问题
randomizer = rnd.Next(1,2);
MSDN说Next调用的参数是minValue和maxValue,但maxValue应该是
返回的随机数的独占上限。maxValue必须大于或等于minValue。
因此,如果您希望包含1到2之间的随机数,您应该编写
randomizer = rnd.Next(1,3);
我建议不要使用字符串。我会喝一杯。获取输入字符串,并尽快将其转换为类似bool的:
bool HorT = false;
if (input=="Head") HorT =true;
然后编写一个布尔Flip函数:
bool Flip(bool value) ...
然后将结果放回字符串:
string output = "Head";
if (HorT==true) output ="Tail";
这使您的逻辑与输入和输出保持分离,即使计算量增加,也可以避免此类问题。