Prosty kalkulator – nieprawidłowy wynik drugiego mnożenia

0

Witam.
Piszę swój pierwszy kalkulator korzystając z różnych źródeł i już jakoś tam działa lecz napotkałem następujące problemy w moim kodzie i projekcie.
Mianowicie nie wiem jakby teraz zrobić, żeby można było w tym kalkulatorze wykonywać w jednym działaniu więcej niż 2 operacje. Teraz wychodzą jakieś dziwne rzeczy, bo gdy daję 5*5 i wychodzi 25 i kolejny raz dam *5 to zamiast 125 wychodzi 275.
Drugą sprawą jest, że nie wiem jak zaprogramować i zaimplementować tutaj żebym mógł działania z przecinkami liczyć.

Załączam kod i link do pobrania projektu:

https://files.fm/u/qvrqafu7

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CalculatorFinal
{
    public partial class Kalkulator : Form
    {
        public Kalkulator()
        {
            InitializeComponent();
        }


        string FirstNumber, SecondNumber;
        char Sign = ' ';


        private void tbResult_TextChanged(object sender, EventArgs e)
        {
            
            
        }

        private void bC_Click(object sender, EventArgs e)
        {

        }

        private void bCE_Click(object sender, EventArgs e)
        {
            Sign = ' ';
            FirstNumber = String.Empty;
            SecondNumber = String.Empty;
            tbResult.Text = String.Empty;
        }

        private void bEquals_Click(object sender, EventArgs e)
        {
            switch (Sign)
            {
                case ('+'):
                    tbResult.Text = (int.Parse(FirstNumber) + int.Parse(SecondNumber)).ToString();
                    break;
                case ('-'):
                    tbResult.Text = (int.Parse(FirstNumber) - int.Parse(SecondNumber)).ToString();
                    break;
                case ('*'):
                    tbResult.Text = (int.Parse(FirstNumber) * int.Parse(SecondNumber)).ToString();
                    break;
                case ('/'):
                    tbResult.Text = (int.Parse(FirstNumber) / int.Parse(SecondNumber)).ToString();
                    break;
            }

        }

        private void bAdding_Click(object sender, EventArgs e)
        {
            Sign = '+';
            tbResult.Text = "";
        }

        private void bDot_Click(object sender, EventArgs e)
        {
            
        }

        private void b0_Click(object sender, EventArgs e)
        {
            Operation (0);
        }
        
        private void b3_Click(object sender, EventArgs e)
        {
            Operation (3);
        }

        private void bSubtraction_Click(object sender, EventArgs e)
        {
            Sign = '-';
            tbResult.Text = "";
        }

        private void b2_Click(object sender, EventArgs e)
        {
            Operation(2);
        }

        private void b1_Click(object sender, EventArgs e)
        {
            Operation(1);
        }

        private void b6_Click(object sender, EventArgs e)
        {
            Operation(6);
        }

        private void bMultiplication_Click(object sender, EventArgs e)
        {
            Sign = '*';
            tbResult.Text = "";
        }

        private void b5_Click(object sender, EventArgs e)
        {
            Operation(5);
        }

        private void b4_Click(object sender, EventArgs e)
        {
            Operation(4);
        }

        private void b9_Click(object sender, EventArgs e)
        {
            Operation(9);
        }

        private void bDivision_Click(object sender, EventArgs e)
        {
            Sign = '/';
            tbResult.Text = "";
        }

        private void b8_Click(object sender, EventArgs e)
        {
            Operation(8);
        }

        private void b7_Click(object sender, EventArgs e)
        {
            Operation(7);
        }

        private void bBackSpace_Click(object sender, EventArgs e)
        {
            if (Sign == ' ' && FirstNumber.Length > 0)
            {
                FirstNumber = FirstNumber.Remove(FirstNumber.Length - 1);
                tbResult.Text = FirstNumber;
            }
            else if (Sign != ' ' && SecondNumber.Length > 0)
            {
                SecondNumber = SecondNumber.Remove(SecondNumber.Length - 1);
                tbResult.Text = SecondNumber;
            }
        }

        private void Operation(int number)
        {
            if (Sign == ' ')
            {
                FirstNumber += number;
                tbResult.Text = FirstNumber;
            }
            else
            {
                SecondNumber += number;
                tbResult.Text = SecondNumber;
            }
        }
    }
}
0

Szczerze? Nie widze tu kalkulatora. Kalkulator czyta Dane z wejscia(String), nastepnie tokenizer uklada Dane w liste, po czym parsujemy I ewaluujemy. Zobacz na moim githubie, jak to mniej wiecej wyglada: https://github.com/lion137/Java-Numeric-Calculator

0
Anonymousss napisał(a):

Teraz wychodzą jakieś dziwne rzeczy, bo gdy daję 5*5 i wychodzi 25 i kolejny raz dam *5 to zamiast 125 wychodzi 275.

Tak działa matematyka. FirstNumber wynosi "5", SecondNumber "55" (bo w metodzie Operation konkatenujesz stringi), więc wynik musi być 275.

Drugą sprawą jest, że nie wiem jak zaprogramować i zaimplementować tutaj żebym mógł działania z przecinkami liczyć.

Użyć prawidłowego typu danych do obliczeń. Nie sądzisz, że trzymanie liczb jako tekst jest kompletnie bez sensu?

Olej GUI, zrób to najpierw konsolowo. Najpierw dla dwóch liczb, żeby nauczyć się podstaw języka. Potem możesz się porywać na bardziej skomplikowane zadania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1