Advertisement
Guest User

Untitled

a guest
Sep 21st, 2019
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. import java.util.Stack;
  2. public class Laskulauseke {
  3. public long laske(String s) {
  4. Stack<Long> luvut = new Stack<>();
  5. Stack<Character> merkit = new Stack<>();
  6. int i = 0;
  7. while (i < s.length()) {
  8. if (s.charAt(i) == '(') merkit.push('(');
  9. else if (s.charAt(i) == ')') {
  10. while (merkit.size() > 0 && merkit.peek() != '(') yhteen_kerto(luvut, merkit);
  11. merkit.pop();
  12. }
  13. else if (Character.isDigit(s.charAt(i))) {
  14. long luku = 0;
  15. while (i < s.length() && Character.isDigit(s.charAt(i))) luku = 10 * luku + (s.charAt(i++)-'0');
  16. luvut.push(luku);
  17. i--;
  18. }
  19. else {
  20. while (s.charAt(i) == '+' && merkit.size() > 0 && merkit.peek() != '(') yhteen_kerto(luvut, merkit);
  21. merkit.push(s.charAt(i));
  22. }
  23. i++;
  24. }
  25. for(int j = 0; j<= merkit.size();j++) yhteen_kerto(luvut, merkit);
  26. return luvut.peek();
  27. }
  28. private void yhteen_kerto(Stack<Long> luvut, Stack<Character> merkit) {
  29. char merkki = merkit.pop();
  30. if (merkki == '+') {
  31. luvut.push(luvut.pop() + luvut.pop());
  32. }
  33. else if (merkki == '*') {
  34. luvut.push(luvut.pop() * luvut.pop());
  35. }
  36. }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement