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 } }