Kalkulator-możliwość liczenia więcej niż dwóch liczb

0

Witam, napisałem prosty kalkulator w Javie. Co zrobić bym mógł liczyć więcej niż dwie liczby. Jak to rozwiązać? Poniżej zamieszczam kod.

private void rownaActionPerformed(java.awt.event.ActionEvent evt) {                                      
        
        druga=(Double.parseDouble(String.valueOf(wyswietl.getText())));
        
        if(plusc>0){
            calosc=pierwsza+druga;
            wyswietl.setText((String.valueOf(calosc)));
            pierwsza=0;
            druga=0;
            plusc=0;            
        }
        if(minusc>0){
            calosc=pierwsza-druga;
            wyswietl.setText((String.valueOf(calosc)));
            pierwsza=0;
            druga=0;
            minusc=0;
        }
0

Odwrotna notacja polska.

0

Ostatnio pisałem na laborki własnie taki prosty kalkulator, tylko że w C#. Dużych różnic nie powinno być.

 
   private void jeden_Click(object sender, EventArgs e)
        {
            textBox1.AppendText("1");
        }

        private void dwa_Click(object sender, EventArgs e)
        {
            textBox1.AppendText("2");
        }

        private void trzy_Click(object sender, EventArgs e)
        {
            textBox1.AppendText("3");
        }

        private void cztery_Click(object sender, EventArgs e)
        {
            textBox1.AppendText("4");
        }

        private void piec_Click(object sender, EventArgs e)
        {
            textBox1.AppendText("5");
        }

        private void szesc_Click(object sender, EventArgs e)
        {
            textBox1.AppendText("6");
        }

        private void siedem_Click(object sender, EventArgs e)
        {
            textBox1.AppendText("7");
        }

        private void osiem_Click(object sender, EventArgs e)
        {
            textBox1.AppendText("8");
        }

        private void dziewiec_Click(object sender, EventArgs e)
        {
            textBox1.AppendText("9");
        }

        private void zero_Click(object sender, EventArgs e)
        {
            if (textBox1.TextLength == 0)
            {
                textBox1.AppendText("0");
            }
            else if (czyJestJuzPrzecinek == true)
            {
                textBox1.AppendText("0");
            }
            else if (Convert.ToDouble(textBox1.Text) != 0)
            {
                textBox1.AppendText("0");
            }
        }

        private void przecinek_Click(object sender, EventArgs e)
        {
            if (!czyJestJuzPrzecinek)
            {
                textBox1.AppendText(",");
                czyJestJuzPrzecinek = true;
            }
        }

        private void wyczysc_Click(object sender, EventArgs e)
        {
            Wyczysc();
        }

        //Operatory

        private void dodaj_Click(object sender, EventArgs e)
        {
            Dodaj();
        }

        private void odejmij_Click(object sender, EventArgs e)
        {
            Odejmij();
        }

        private void pomnoz_Click(object sender, EventArgs e)
        {
            Pomnoz();
        }

        private void podziel_Click(object sender, EventArgs e)
        {
            Podziel();
        }

        private void rownasie_Click(object sender, EventArgs e)
        {
            RownaSie();

        }

        //Mechanika

        enum AktualnaOperacja { plus, minus, mnozenie, dzielenie };
        AktualnaOperacja aktualnaOperacja;

        double akumulator = 0.0;
        bool czyAkumulatorPelen = false;
        bool czyToBylWynik = false;
        bool czyJestJuzPrzecinek = false;

        void Dodaj()
        {
            if (!czyAkumulatorPelen && textBox1.TextLength > 0)
            {
                akumulator = Convert.ToDouble(textBox1.Text);
                czyAkumulatorPelen = true;
                aktualnaOperacja = AktualnaOperacja.plus;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
                
            }
            else if (textBox1.TextLength > 0 && !czyToBylWynik)
            {
                akumulator += Convert.ToDouble(textBox1.Text);
                aktualnaOperacja = AktualnaOperacja.plus;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
            }
            else if (textBox1.TextLength > 0 && czyToBylWynik)
            {
                czyToBylWynik = false;
                aktualnaOperacja = AktualnaOperacja.plus;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
            }
        }

        void Odejmij()
        {
            if (!czyAkumulatorPelen && textBox1.TextLength > 0)
            {
                akumulator = Convert.ToDouble(textBox1.Text);
                czyAkumulatorPelen = true;
                aktualnaOperacja = AktualnaOperacja.minus;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
            }
            else if (textBox1.TextLength > 0 && !czyToBylWynik)
            {
                akumulator -= Convert.ToDouble(textBox1.Text);
                aktualnaOperacja = AktualnaOperacja.minus;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
            }
            else if (textBox1.TextLength > 0 && czyToBylWynik)
            {
                czyToBylWynik = false;
                aktualnaOperacja = AktualnaOperacja.minus;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
            }

        }

        void Pomnoz()
        {
            if (!czyAkumulatorPelen && textBox1.TextLength > 0)
            {
                akumulator = Convert.ToDouble(textBox1.Text);
                czyAkumulatorPelen = true;
                aktualnaOperacja = AktualnaOperacja.mnozenie;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
            }
            else if (textBox1.TextLength > 0 && !czyToBylWynik)
            {
                akumulator *= Convert.ToDouble(textBox1.Text);
                aktualnaOperacja = AktualnaOperacja.mnozenie;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
            }
            else if (textBox1.TextLength > 0 && czyToBylWynik)
            {
                czyToBylWynik = false;
                aktualnaOperacja = AktualnaOperacja.mnozenie;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
            }
        }

        void Podziel()
        {
            if (!czyAkumulatorPelen && textBox1.TextLength > 0)
            {
                akumulator = Convert.ToDouble(textBox1.Text);
                czyAkumulatorPelen = true;
                aktualnaOperacja = AktualnaOperacja.dzielenie;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
            }
            else if (textBox1.TextLength > 0 && !czyToBylWynik)
            {
                double mianownik = Convert.ToDouble(textBox1.Text);
                if (mianownik == 0.0)
                {
                    Wyczysc();
                }
                else
                {
                    akumulator /= mianownik;
                    aktualnaOperacja = AktualnaOperacja.dzielenie;
                    czyJestJuzPrzecinek = false;
                    textBox1.Clear();
                }
            }
            else if (textBox1.TextLength > 0 && czyToBylWynik)
            {
                czyToBylWynik = false;
                aktualnaOperacja = AktualnaOperacja.dzielenie;
                czyJestJuzPrzecinek = false;
                textBox1.Clear();
            }
        }

        void Wyczysc()
        {
            textBox1.Clear();
            akumulator = 0.0;
            czyToBylWynik = false;
            czyAkumulatorPelen = false;
            czyJestJuzPrzecinek = false;
        }

        void RownaSie()
        {
            switch (Convert.ToInt32(aktualnaOperacja))
            {
                case 0:
                    Dodaj();
                    break;
                case 1:
                    Odejmij();
                    break;
                case 2:
                    Pomnoz();
                    break;
                case 3:
                    Podziel();
                    break;
                default:
                    break;
            }
            textBox1.Clear();
            czyJestJuzPrzecinek = false;
            textBox1.AppendText(akumulator.ToString());
            czyToBylWynik = true;
        }
1

@autor, dlaczego akurat tak?

druga=(Double.parseDouble(String.valueOf(wyswietl.getText())));

proponuję skomplikować
druga=(Double.parseDouble(String.valueOf(String.valueOf(String.valueOf(wyswietl.getText()))))));

 albo uprościć
```java
druga=Double.parseDouble(wyswietl.getText());

Pytanie jest niejasne:

chcesz mieć kilka kilka pól tekstowych, użytkownik do każdego coś wpisuje, potem sumowane są wszystkie,</li> jest jedno pole tekstowe, do którego można wpisać np. 123.55+46.145+89.23 i program policzy sumę, rozwiązanie podał @Patryk27,</li> użytkownik wpisuje gdzieś liczbę, potem drugą, wybiera sumowanie, pojawia się gdzieś wynik dodawania, potem wpisuje kolejna liczbę, program dodaje te liczbę do poprzedniej sumy.</li> </ul>
0

tak, chodzi mi np. o coś takiego 123.55+46.145+89.23. Wiem, że odwrotna notacja polska jest rozwiązaniem ale nie umiem tego poprawnie zapisać w kodzie....

0

No to skoro nie umiesz tego zapisać, to masz 3 4 wyjścia:
1.Pobierz gotowca.
2.Daruj sobie.
3.Jeżeli nie umiesz jakiejś części, to możesz ją wrzucić na forum (z tym, że nie na zasadzie "Nie umiem napisać ONP - pomocy", tylko daj kawałki kodu z którymi masz problem, itd.).
4.Próbuj dalej...

0

Oczywiście rozwiązanie powinno uwzględniać kolejność działań oraz notację z nawiasami?

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