Member 12745448 Ответов: 1

Помощь в понимании кода


namespace VisualCalculator
{
    /// 
    public partial class MainWindow : Window
    {

        bool isNewEntry = true;
        double currentValue = 0;
        enum Operation { Add, Subtract, Multiply, Divide, Equals, Start, LastOp };
        Operation currentOperation = Operation.Start;

        public MainWindow()
        {
            InitializeComponent();
            txtOut.Text = currentValue.ToString();
        }

        private void BtnEntry_Click(object sender, RoutedEventArgs e)
        {
            //dummy value for trying to parse the entry string
            int result;

            //Get the value from the button label
            Button btn = (Button)sender;
            string value = btn.Content.ToString();

            //special handling for decimal point
            if (value.Equals(".")) {
                if (isNewEntry)
                {
                    return;
                }
                if (!txtOut.Text.Contains(".")) {
                    txtOut.Text += value;
                    isNewEntry = false;
                }
                return;
            }

            //try to parse entry as int; 
            //if successful, append to current entry
            if (Int32.TryParse(value, out result))
            {
                if (isNewEntry || txtOut.Text.Equals("0"))
                {
                    txtOut.Text = "";
                }
                txtOut.Text += value;
                isNewEntry = false;
            }
        }

        private void Calculate(Operation op)
        {
            double newValue = Double.Parse(txtOut.Text);
            double result;

            if (op != Operation.LastOp)
            {
                currentOperation = op;
            }

            switch (currentOperation)
            {
                case Operation.Add:
                    result = currentValue + newValue;
                    break;
                case Operation.Subtract:
                    if (currentValue == 0)
                    {
                        result = newValue;    
                    }
                    else
                    {
                        result = currentValue - newValue;
                    }
                    break;
                case Operation.Multiply:
                    if (currentValue == 0)
                    {
                        result = newValue;    
                    }
                    else
                    {
                        result = currentValue * newValue;
                    }
                    break;
                case Operation.Divide:
                    if (newValue == 0)
                    {
                        txtOut.Text = currentValue.ToString();
                        return;
                    }
                    else if (currentValue == 0)
                    {
                        currentValue = newValue;
                        txtOut.Text = "0";
                        return;
                    }
                    else
                    {
                        result = currentValue / newValue;
                    }
                    break;
                default:
                    return;
            }

            currentValue = result;
            txtOut.Text = result.ToString();
            isNewEntry = true;
        }

        // 4 event handlers for operations:
        private void BtnAdd_Click(object sender, RoutedEventArgs e)
        {
            Calculate(Operation.Add);
        }
        private void BtnSubtract_Click(object sender, RoutedEventArgs e)
        {
            Calculate(Operation.Subtract);
        }
        private void BtnMultiply_Click(object sender, RoutedEventArgs e)
        {
            Calculate(Operation.Multiply);
        }
        private void BtnDivide_Click(object sender, RoutedEventArgs e)
        {
            Calculate(Operation.Divide);
        }

        //Clear the current results
        private void BtnClear_Click(object sender, RoutedEventArgs e)
        {
            txtOut.Text = "0";
            currentValue = 0;
            isNewEntry = true;
        }

        //Handle the Equals button
        private void BtnEquals_Click(object sender, RoutedEventArgs e)
        {
            Calculate(Operation.LastOp);
        }

    }
}


Что я уже пробовал:

Дорогие все,

Я начинающий разработчик C#, и у меня есть некоторые проблемы с пониманием кода. Lynda.com учебники. Это приложение для визуального калькулятора.

Я понимаю обработчик событий btnEntry, но тогда я полностью потерян...

Мои вопросы таковы:
1) Как скрипт отличается от значения, введенного "до" выбора оператора и "после"?
Я заметил 2 vars-currentValue и newValue, но совершенно не понимаю логики, как это делается...

2) метод вычисления операции с аргументом операции:
Не понимаю, что одна на всех...

3) мульти (вложенные) " if statments"
Что именно делает ключевое слово return?

Всего наилучшего,
Пит

Patrice T

И вам никогда не приходило в голову спросить автора ?

NotPolitcallyCorrect

На вопросы 1 и 2 Вы можете легко ответить, научившись пользоваться отладчиком. На вопрос № 3 можно было бы легко ответить, если бы вы просто прочитали документацию.

1 Ответов

Рейтинг:
2

David_Wimbley

Цитата:
1) Как скрипт отличается от значения, введенного "до" выбора оператора и "после"?
Я заметил 2 vars-currentValue и newValue, но совершенно не понимаю логики, как это делается...


Итак, ваше приложение-это калькулятор. Если вы понимаете, как работают классы/объекты, вы увидите, что currentValue инициализируется равным 0. Затем, как только математическая операция выполнена, текущее значение становится результатом этой операции.

Пример:

Текущее значение = 0;
То, что я набираю в текстовое поле txtOut, равно 1.
Моя операция такова.

Итак, 1 + 0 = 1. Поэтому, основываясь на предоставленном вами коде, текущее значение теперь равно 1.

Похоже, что у вас есть кнопка clear, которая затем сбрасывает значение currentValue в 0 в вашем коде.

Цитата:
2) метод вычисления операции с аргументом операции:
Не понимаю, что одна на всех...


Метод вычисления операции использует перечисление, чтобы решить, какую математическую операцию он выполняет. Я предполагаю, что вы знаете основные функции калькулятора, так что вы должны быть в состоянии понять, что такое что-то вроде операции.Добавить средства.

Этот параметр используется в операторе switch для условного выполнения операции.

Цитата:
3) мульти (вложенные) " if statments"
Что именно делает ключевое слово return?


Ключевое слово return завершает выполнение кода. Если это просто return; то есть используется, то это потому, что ваш метод имеет возвращаемый тип void, который означает, что ничего не возвращается. Если это было что-то вроде return 1;, то ваш метод, скорее всего, имеет тип возврата int, и вы возвращаете 1, который является целым числом