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.
0
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