Добавление пользовательского ввода в уравнение через переменную возможно?(С #) - PullRequest
0 голосов
/ 12 октября 2018

Я прошу прощения, если это действительно простое решение ...

Поэтому я пытаюсь получить конечный баланс из 4 входов, которые

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

balance = contribution + balance + (INTEREST_RATE * balance) + (yearly * balance);

Все хорошо, пока компилятор не заявит, что Использование неназначенной локальной переменной 'contrib' меня действительно смущает, потому что в комментарии вверху кода, который я сказалэтот вклад будет int.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void calculateButton_Click(object sender, EventArgs e)
    {
        // Constant for the monthly interest rate.
        const decimal INTEREST_RATE = 0.005m;

        // Local variables
        decimal balance; // The account balance
        int months; // The number of months
        int contribution;
        int count = 1; // Loop counter, initialized with 1
        decimal yearly;

        // Get the starting balance.
        if (decimal.TryParse(txtStartBalance.Text, out balance))
        {
            // Get the number of months.
            if (int.TryParse(txtMonths.Text, out months))
            {
                // Get the yearly interest rate
                if (decimal.TryParse(txtYearly.Text, out yearly))
                {
                    //Get monthly contribution
                    if (int.TryParse (txtMonthly.Text, out contribution));
                }
                // The following loop calculates the ending balance.
                while (count <= months)
                {
                    // Add this month's interest to the balance.
                    balance = contribution + balance + (INTEREST_RATE * balance) + (yearly * balance);

                    // Display this month's ending balance.
                    if (rdoEnglish.Checked == false)
                        lstDetails.Items.Add("ʻO ka pale hope " + "no ka mahina " + count + " ʻO " + balance.ToString("c"));
                    else
                        lstDetails.Items.Add("The ending balance for " + "month " + count + " is " + balance.ToString("c"));

                    // Add one to the loop counter.
                    count = count + 1;
                }

                // Display the ending balance.
                txtEnding.Text = balance.ToString("c");

Еще раз спасибо, что нашли время, чтобы помочь мне.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Попытайтесь объявить свои переменные, как показано ниже:

decimal.TryParse(txtStartBalance.Text, out decimal balance);  

лучше установить флажок для поля вклада (txtMonthly) и установить его видимость в свойство Checkbox.checked, так что еслипользователь хочет установить необязательное значение вклада, должен установить флажок, чтобы записать его.
Кроме того, использование if s в вашем коде бесполезно, пока вы не выбросите Exceptions, когда эти TryParse методы возвращают значение false ипредупредить пользователя, чтобы повторить попытку с правильными вводами.

0 голосов
/ 12 октября 2018

Это действительно смущает меня, потому что в комментарии вверху кода я сказал, что вклад будет int.

Да, но вы не присвоили значение к переменной, по крайней мере, в одном пути, который может пройти ваш код.(В частности, если int.TryParse (txtMonthly.Text, out contribution)); терпит неудачу) И затем вы пытаетесь использовать contribution в строке:

balance = contribution + balance + (INTEREST_RATE * balance) + (yearly * balance);

Вам необходимо присвоить значение contribution, прежде чем использовать его.Подумайте о том, что contribution должно представлять, и присвойте ему значение соответственно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...