Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Kaltulator ONP Java

$
0
0

Witajcie, zachciałem sobie ostatnio napisać taki kalkulator ONP w Javie. Polega to na tym, że np. wyrażenie: 3+(2-5)*(4/2) zamienia na onp, czyli 3 2 5  - 4 2  / * +. Potem ma to zamienić na normalną wartość.

Pierwszą część kodu programu zrobiłem, czyli zamiana na onp działa w 100%, ale mam problem z drugą częścią, a mianowicie zamianą tego na końcową wartość. Działa mi ona dla niektórych wyrażeń(np. 2 2 * +), a dla innych nie (np. 3 2 5  - 4 2  / * +). Tak wygląda ta funkcja. Byłbym wdzięczny, jeśli chcielibyście mi pomóc :)

private static void calculate(String result) {
        Stack<Double> values = new Stack<>(); //stos
        String str = ""; //zmienna na poszczegolna liczbe, ktora bede kladl na stos

        for (int i = 0; i < result.length(); i++) {
            if(result.charAt(i) == ' '){
                if(result.charAt(i-1) != ' ' && result.charAt(i-1) != '+' &&//mogą być 2 spacje pod rząd
                   result.charAt(i-1) != '-' && result.charAt(i-1) != '*' && result.charAt(i-1) != '/'){
                    values.push(Double.parseDouble(str));
                    str = "";
                }
            }
            else if(result.charAt(i) == '+' || result.charAt(i) == '-' ||
                    result.charAt(i) == '*' || result.charAt(i) == '/'){

                if(result.charAt(i) == '-' && result.charAt(i+1) != ' ')
                    str += '-';
                else{
                    double a = values.pop();
                    double b = values.pop();

                    switch (result.charAt(i)){
                        case '+':
                            values.push(a+b);
                            break;
                        case '-':
                            values.push(a-b);
                            break;
                        case '*':
                            values.push(a*b);
                            break;
                        case '/':
                            values.push(a/b);
                            break;
                    }
                }
            }
            else {
                str += result.charAt(i);
            }
        }

        while(true){
            if(values.empty())
                break;
            else
                System.out.println(values.pop()); //tutaj taka proba wypisania na koncu
        }
    }

 


Viewing all articles
Browse latest Browse all 21942

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra