Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Stack;
- public class Laskulauseke {
- public long laske(String s) {
- Stack<Long> luvut = new Stack<>();
- Stack<Character> merkit = new Stack<>();
- int i = 0;
- while (i < s.length()) {
- if (s.charAt(i) == '(') merkit.push('(');
- else if (s.charAt(i) == ')') {
- while (merkit.size() > 0 && merkit.peek() != '(') yhteen_kerto(luvut, merkit);
- merkit.pop();
- }
- else if (Character.isDigit(s.charAt(i))) {
- long luku = 0;
- while (i < s.length() && Character.isDigit(s.charAt(i))) luku = 10 * luku + (s.charAt(i++)-'0');
- luvut.push(luku);
- i--;
- }
- else {
- while (s.charAt(i) == '+' && merkit.size() > 0 && merkit.peek() != '(') yhteen_kerto(luvut, merkit);
- merkit.push(s.charAt(i));
- }
- i++;
- }
- for(int j = 0; j<= merkit.size();j++) yhteen_kerto(luvut, merkit);
- return luvut.peek();
- }
- private void yhteen_kerto(Stack<Long> luvut, Stack<Character> merkit) {
- char merkki = merkit.pop();
- if (merkki == '+') {
- luvut.push(luvut.pop() + luvut.pop());
- }
- else if (merkki == '*') {
- luvut.push(luvut.pop() * luvut.pop());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement