Untitled
By: a guest | Feb 9th, 2010 | Syntax:
Java | Size: 2.78 KB | Hits: 36 | Expires: Never
import java.util.Scanner;
import java.util.Stack;
public class Calculator {
int x,y;
if(a.equals("+") || a.equals("-")) x = 1;
else if(a.equals("*") || a.equals("/")) x = 2;
else x = 0;
if(b.equals("+") || b.equals("-")) y = 1;
else if(b.equals("*") || b.equals("/")) y = 2;
else y = 0;
if(x<y)return true;
else return false;
}
Scanner sc = new Scanner(ex);
Stack<String> operators = new Stack<String>();
while(sc.hasNext()){
token = sc.next();
/*if(operators.isEmpty())System.out.println("empty");
else{
for(String str : operators){
System.out.print(" "+str);
}
System.out.println();
}*/
try{
sb.append(" "+token+" ");
if(operators.isEmpty()) operators.push(token);
else{
if(token.equals(")")){
while(true){
if(operators.peek().equals("(")){
operators.pop();
break;
}
else sb.append(operators.pop());
}
}
else if(token.equals("(")) operators.push(token);
else if(priority(operators.peek(), token)){
operators.push(token);
}
else{
sb.append(" "+operators.pop()+" ");
operators.push(token);
}
}
}
}
while(!operators.isEmpty()){
sb.append(" "+operators.pop()+" ");
}
return sb.toString();
}
public static float calculate
(float a,
float b,
String o
){
if(o.equals("+"))return a+b;
else if(o.equals("-"))return b-a;
else if(o.equals("/"))return b/a; //nevem tocno zakaj mora bit tukaj obrnjeno :P
else return a*b;
}
public static float evaluate
(String ex
){
float result=0;
Stack<Float> calc = new Stack<Float>();
ex = infixToPostfix(ex);
Scanner sc = new Scanner(ex);
while(sc.hasNext()){
token = sc.next();
try{
calc.
push(Float.
parseFloat(token
));
calc.push(calculate(calc.pop(), calc.pop(), token));
}
}
result = calc.pop();
return result;
}
public static void main
(String[] args
){
Scanner sc
= new Scanner
(System.
in);
System.
out.
println("Navodila: Dovoljeni operatorji so +,-,*,/.\nOperande in operatorje locite s presledki.\nZa izhod vpisite \"x\".");
while(true){
input = sc.nextLine();
if(input.equals("x"))break;
try{
System.
out.
println("Rezultat: "+evaluate
(input
));
System.
out.
println("Napaka v sintaksi, poskusite ponovno.");
}
}
}
}