繁体   English   中英

我该如何修复这个 for 循环程序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM