Wykonywanie kolejnego działania.

0

Witam. Napisałem prosty kalkulator w c#. Po wykonaniu jednego działania muszę kasować wynik z pamięci, żeby wywołać kolejne działanie. Co mógłbym zmienić żeby działać na otrzymanym wyniku, bez konieczności kasowania poprzedniego wyniku. Poniżej zamieszczam kod:


``` namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        String LiczbaPierwsza = " "; 
        String LiczbaDruga=" ";
        char znak= ' ';
        String tymczasowa = " ";
        public Form1()
        {
            InitializeComponent();
        }
        private void liczba(int liczba) {
            if (znak == ' ')
            {
                LiczbaPierwsza += liczba;
                textBox1.Text = LiczbaPierwsza.ToString();
            }
            else
            {
                LiczbaDruga += liczba;
                textBox1.Text = LiczbaDruga.ToString();
            }

        }

        private void b0_Click(object sender, EventArgs e)
        {
            liczba(0);
        }

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

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

        private void b3_Click(object sender, EventArgs e)
        {
            liczba(3);
        }

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

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

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

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

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

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

        private void bdodawanie_Click(object sender, EventArgs e)
        {
            znak = '+';
            textBox1.Text = " ";
        }

        private void bodejmowanie_Click(object sender, EventArgs e)
        {
            znak = '-';
            textBox1.Text = " ";
        }

        private void bmnozenie_Click(object sender, EventArgs e)
        {
            znak = '*';
            textBox1.Text = " ";
        }

        private void bdzielenie_Click(object sender, EventArgs e)
        {
            znak = '/';
            textBox1.Text = " ";
        }

        private void bwynik_Click(object sender, EventArgs e)
        {
           
            switch (znak) {
                case '+':
                    if (LiczbaPierwsza == " ")
                    {
                        textBox1.Text = (int.Parse("0") + int.Parse(LiczbaDruga)).ToString();
                        tymczasowa=textBox1.Text;
                      
                    }
                    else if (LiczbaDruga == " ")
                    {
                        textBox1.Text = (int.Parse(LiczbaPierwsza) + int.Parse(LiczbaPierwsza)).ToString();
                        tymczasowa = textBox1.Text;
                    
                    }else
                    {
                        textBox1.Text = (int.Parse(LiczbaPierwsza) + int.Parse(LiczbaDruga)).ToString();
                        tymczasowa = textBox1.Text;
                    }
                    break;
                case '-':
                    if (LiczbaPierwsza == " ")
                    {
                        textBox1.Text = (int.Parse("0") - int.Parse(LiczbaDruga)).ToString();
                        break;
                    }
                    else if (LiczbaDruga == " ")
                    {
                        textBox1.Text = (int.Parse(LiczbaPierwsza) - int.Parse(LiczbaPierwsza)).ToString();
                        break;
                    }
                    else
                    {
                        textBox1.Text = (int.Parse(LiczbaPierwsza) - int.Parse(LiczbaDruga)).ToString();
                        break;
                    }
                case '*':
                    if (LiczbaPierwsza == " ")
                    {
                        textBox1.Text = (int.Parse("0") * int.Parse(LiczbaDruga)).ToString();
                        break;
                    }
                    else if (LiczbaDruga == " ")
                    {
                        textBox1.Text = (int.Parse(LiczbaPierwsza) * int.Parse(LiczbaPierwsza)).ToString();
                        break;
                    }
                    else
                    {
                        textBox1.Text = (int.Parse(LiczbaPierwsza) * int.Parse(LiczbaDruga)).ToString();
                        break;
                    }
                case '/':
                    if (LiczbaDruga == "0")
                    {
                        textBox1.Text = "Error. nie można dzielić przez 0";
                        break;
                    }
                    if (LiczbaPierwsza == " ")
                    {
                        textBox1.Text = (int.Parse("0") / int.Parse(LiczbaDruga)).ToString();
                        break;
                    }
                    else if (LiczbaDruga == " ")
                    {
                        textBox1.Text = (int.Parse(LiczbaPierwsza) / int.Parse(LiczbaPierwsza)).ToString();
                        break;
                    }
                    else
                    {
                        textBox1.Text = (int.Parse(LiczbaPierwsza) / int.Parse(LiczbaDruga)).ToString();
                        break;
                    }
            }
        }

        private void bkasuj_Click(object sender, EventArgs e)
        {
            LiczbaPierwsza =" ";
            LiczbaDruga = " ";
            znak = ' ';
            textBox1.Text = " ";
        }
1

zapisz wynik z powrotem do LiczbaPierwsza i wyzeruj znak
tak naprawdę to zbyt proste rozwiązanie - prawdziwy kalkulator zapamiętuje znak i powtarza operację po naciśnięciu "=" ale jednocześnie wpisanie liczby przed znakiem powoduje nadpisanie pierwszej liczby, więc Twoje rozwiązanie jest trochę za proste, sprawdzanie samego znaku nie wystarczy, potrzebujesz zrobić maszynę stanów

0

@obscurity: Chciałem to mu jakoś prosto wytłumaczyć, ale na to nie wpadłem :D

Ogólnie to czepił bym się też tego kodu. Można zrobić jeden click event i zczytywać z sendera text

private void Button_Click(object sender, EventArgs e)
{
     Button btn = sender as Button;
     int number = int.Parse(btn.Text);  
     liczba(number);
}

Do liczenia korzysta ze switcha, a w środku (w case) robi ify, trochę się to gryzie w moich oczach.

A to?

 String LiczbaPierwsza = " "; 

Niech zgadne... Wcześniej uczyłeś się Javy, że string jest z dużej litery? :-)

0
AdamWox napisał(a):

@obscurity: Chciałem to mu jakoś prosto wytłumaczyć, ale na to nie wpadłem :D

Ogólnie to czepił bym się też tego kodu. Można zrobić jeden click event i zczytywać z sendera text

private void Button_Click(object sender, EventArgs e)
{
     Button btn = sender as Button;
     int number = int.Parse(btn.Text);  
     liczba(number);
}

Do liczenia korzysta ze switcha, a w środku (w case) robi ify, trochę się to gryzie w moich oczach.

A to?

 String LiczbaPierwsza = " "; 

Niech zgadne... Wcześniej uczyłeś się Javy, że string jest z dużej litery? :-)

Tak Java.

0
obscurity napisał(a):

zapisz wynik z powrotem do LiczbaPierwsza i wyzeruj znak
tak naprawdę to zbyt proste rozwiązanie - prawdziwy kalkulator zapamiętuje znak i powtarza operację po naciśnięciu "=" ale jednocześnie wpisanie liczby przed znakiem powoduje nadpisanie pierwszej liczby, więc Twoje rozwiązanie jest trochę za proste, sprawdzanie samego znaku nie wystarczy, potrzebujesz zrobić maszynę stanów

Dzięki. A co do kodu jest to pierwszy program w c#

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