[英]How do I fix this for loop program?
我被困在这个程序中,我必须创建一个 for 循环来预测给定天数后的人口。 这里是:
创建一个应用程序来预测生物体种群的大致大小。 该应用程序应使用文本框允许用户输入生物体的起始数量、平均每日种群数量增加(百分比)以及生物体将要繁殖的天数。 例如,假设用户输入以下值:
Starting number of organisms: 2
Average daily increase: 30%
Number of days to multiply: 10
它应该是这样的 output:
(Days) (Approximate Population)
1 ------- 2
2 ------- 2.6
3 ------- 3.38
4 ------- 4.394
5 ------- 5.7122
等等。
但是当我运行我的代码时,这就是所有出现的内容:
(Days) (Approximate Population)
10 ------- 0
这是代码:
public partial class Population : Form
{
int count = 1;
double organisms;
double dailyIncrease;
double days;
double population;
public Population()
{
InitializeComponent();
}
private void calculateButton_Click(object sender, EventArgs e)
{
try
{
organisms = double.Parse(organismsTextBox.Text);
try
{
dailyIncrease = double.Parse(dailyIncreaseTextBox.Text);
try
{
days = double.Parse(daysTextBox.Text);
for (int count = 1; count <= days; count++)
population += (organisms * dailyIncrease / 100);
populationListBox.Items.Add(days + " " + population);
}
catch
{
MessageBox.Show("Entires must be numeric.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
daysTextBox.Focus();
daysTextBox.SelectAll();
}
}
catch
{
MessageBox.Show("Entries must be numeric.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
dailyIncreaseTextBox.Focus();
dailyIncreaseTextBox.SelectAll();
}
}
catch
{
MessageBox.Show("Entries must be numeric", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
organismsTextBox.Focus();
organismsTextBox.SelectAll();
}
}
}
我不确定我在这里做错了什么?
如果您的问题是 populationListBox 仅包含最后一天的项目,请尝试以下操作:
for (int count = 1; count <= days; count++)
{
population += (population * dailyIncrease / 100);
populationListBox.Items.Add(count + " " + population);
}
您可以通过使用xxx.TryParse()
方法并检查失败而不是成功来使其更易于阅读:
private void calculateButton_Click(object sender, EventArgs e)
{
double organisms;
double dailyIncrease;
int days;
if (!double.TryParse(organismsTextBox.Text, out organisms))
{
MessageBox.Show("Entries must be numeric", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
organismsTextBox.Focus();
organismsTextBox.SelectAll();
return;
}
if (!double.TryParse(dailyIncreaseTextBox.Text, out dailyIncrease))
{
MessageBox.Show("Entries must be numeric.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
dailyIncreaseTextBox.Focus();
dailyIncreaseTextBox.SelectAll();
return;
}
if (!int.TryParse(daysTextBox.Text, out days))
{
MessageBox.Show("Entires must be numeric.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
daysTextBox.Focus();
daysTextBox.SelectAll();
return;
}
populationListBox.Items.Clear();
for (int count = 1; count <= days; count++)
{
populationListBox.Items.Add(count + "\t" + organisms);
organisms += (organisms * dailyIncrease / 100);
}
}
示例运行:
您不应该使用异常来控制代码流。 这使得遵循代码的逻辑变得非常困难。
而且由于您使用完全相同的代码解析双打,因此您还可以删除很多重复项。
因此,在calculateButton_Click
内部添加这个本地方法:
bool TryParse(TextBox textBox, out double value)
{
if (double.TryParse(textBox.Text, out value))
{
return true;
}
MessageBox.Show("Entries must be numeric.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBox.Focus();
textBox.SelectAll();
value = default(double);
return false;
}
它处理您传入的任何TextBox
的解析。
现在calculateButton_Click
的代码 rest 是:
if (TryParse(organismsTextBox, out double organisms))
{
if (TryParse(dailyIncreaseTextBox, out double dailyIncrease))
{
if (TryParse(daysTextBox, out double days))
{
double population = 0.0;
for (int count = 1; count <= days; count++)
{
population += (organisms * dailyIncrease / 100.0);
populationListBox.Items.Add($"{days} {population}");
}
}
}
}
这包括将每天的人口添加到populationListBox
的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.