Логическая ошибка на дисплее / математика не отображает начальный результат - PullRequest
0 голосов
/ 23 октября 2019

У меня есть программа оценки населения для школы, результаты не отображают первый набор результатов. Вот код.

private void Button1_Click(object sender, EventArgs e)
{
    double startingPop;
    double increasePer;
    double numDays;

    const int INTERVAL = 1;

    if (double.TryParse(textBox1.Text, out startingPop))
    {
        if (double.TryParse(textBox2.Text, out increasePer))
        {
            if (double.TryParse(textBox3.Text, out numDays))
            {
                for (int i = 1; i <= numDays; i += INTERVAL)
                {
                    startingPop = (startingPop * (increasePer / 100) + startingPop);
                    Results.Items.Add("After " + i + " days, the amount of organisms is " + startingPop);
                }
            }
        }
    }
}

private void Button2_Click(object sender, EventArgs e)
{
    this.Close();
}

private void Button3_Click(object sender, EventArgs e)
{
    textBox1.Text = "";
    textBox2.Text = "";
    textBox3.Text = "";
    Results.Items.Clear();
}

Я хочу, чтобы он показывал организмы первого дня 2, вместо этого он показывает первый расчет с процентом увеличения, т.е. (день 1 2.6). Я знаю, что это, вероятно, супер очевидно, поэтому я прошу прощения. Спасибо за ваше понимание.

1 Ответ

0 голосов
/ 23 октября 2019

Если я правильно понимаю вашу проблему, ваш код должен выглядеть примерно так:

private void button1_Click(object sender, EventArgs e)
{
    double startingPop;
    double increasePer;
    double numDays;

    const int INTERVAL = 1;

    if (double.TryParse(textBox1.Text, out startingPop) &&
        double.TryParse(textBox2.Text, out increasePer) &&
        double.TryParse(textBox3.Text, out numDays))
    {
        Results.Items.Add("On the first day, the amount of organisms is " + startingPop);

        for (int i = 1; i <= numDays; i += INTERVAL)
        {
            startingPop = (startingPop * (increasePer / 100) + startingPop);
            Results.Items.Add("After " + i + " day(s), the amount of organisms is " + startingPop);
        }
    }
}

Изменения, которые я внес в код:

  • Объедините три ifоператоры в одно с использованием оператора &&.
  • Распечатайте значение совокупности , прежде чем увеличивать его , чтобы следующее отображаемое значение (которое читается как "после 1day ") будет следующим увеличенным значением.
  • Чтобы сделать ваши элементы результатов грамматически правильными, вы можете поместить вторую строку внутри цикла примерно так:

    string s = (i > 1 ? "s" : string.Empty);
    Results.Items.Add($"After {i} day{s}, the amount of organisms is {startingPop}.");
    

Теперь, предполагая, что значения в textBox1, textBox2, textBox3 равны 2, 30 и 5, отображаемый результат будет выглядеть примерно так:

Result

...