Kalkulator ze stringiem na wejściu

0

Jak napisć kalkulator który odczytuje wartości ze stringa np "2+3+7" i dzieli go na dwa stosy valuestack i operatorstack i oblicza używając funkcji pop() ? Kolejność wykonywnia działań nie musi być zchowana.

1

o_O Tak jak napisałeś, przeleć input i wrzucaj operacje na jeden stos a liczby na drugi stos a potem robisz

pop operacja
pop val1 
pop val2
push operacja(val1,val2)

i tak aż operacje się nie skończą. Czyli mamy
++
2,3,7
I z tego lecimy

pop operacja // +
pop val1 // 2
pop val2 // 3
push operacja(val1, val2) // push 2+3 // push 5

I mamy z tego
+
5, 7
I znowu:

pop operacja // +
pop val1 // 5
pop val2 // 7
push operacja(val1, val2) // push 5+7 // push 12

Stos operacji jest pusty więc wynik końcowy jest na szczycie stosu -> 12

0

właśnie tak myślałem jakiś pomysł gdzie mam błąd ?

 public double calculate(String string)throws NumberFormatException
    {
Stack<Double> value= new Stack<Double>();
        Stack<Character> operator= new Stack<Character>();
        ArrayList<Character> temp=new ArrayList<Character>();
        charArray=string.toCharArray(); 
       
        for( char ch: charArray)
        {
            if(ch=='('&&ch==leftbracket)
            {
                value.push(d);
            }
            if(Character.isDigit(ch)||ch=='.')
            {
                temp.add(ch);
                
            }
            else
            while(!temp.isEmpty())
            {
               value.push(Double.parseDouble(getStringRepresentation(temp)));
               System.out.println(getStringRepresentation(temp));
               temp.clear();
            }
                System.out.println(getStringRepresentation(temp));
           if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='^')
            { 
               
               operator.push(ch);
               System.out.println(ch);
               
            }
        

    }
    while(!operator.isEmpty())
    {
    result =compute(value.pop(),value.pop(), operator.pop());
    value.push(result);
    }
       
    result=value.peek();
     return result;
    }
    private  Double compute(Double operandOne, Double operandTwo, char operator)
    {
        if(operator == '+'){
            return operandOne + operandTwo;
        } else if(operator == '-'){
            return operandOne - operandTwo;
        } else if(operator == '*'){
            return operandOne * operandTwo;
        } else if(operator == '/'){
            return operandOne / operandTwo;        
        } else if(operator == '^'){
            return Math.pow(operandOne, operandTwo);
        } else {
            return null;
        }
    } 
0

A jesteś pewien ze masz to tak zrobić a nie po ludzku za pomocą ONP?

0

a jak by to wyglądało z pomocą onp?

0

dziękuje bardzo

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