Olá, sou iniciante e gostaria de saber onde está o erro e o porquê no algoritimo seguinte.
Este é um trabalho que o professor pediu mas na hora de compilar dá erro.
package calculadora;
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.Vector;
public class CalculadoraSistematizacao {
static String expressao;
public static void main(String args[]){
System.out.println(" Digite a expressão matemática" + "\n pode conter até três variáveis (x, y, z):");
Scanner in = new Scanner(System.in);
expressao = in.next();
if(!Parenteses()){
System.out.println("Expressão inválida!");
}
if(expressao.indexOf("x") >= 0){
System.out.println("Digite um valor para x:");
String x1 = in.next();
expressao = expressao.replace("x", x1);
}
if(expressao.indexOf("y") >= 0){
System.out.println("Digite um valor para y:");
String y1 = in.next();
expressao = expressao.replace("y", y1);
}
if(expressao.indexOf("z") >= 0){
System.out.println("Digite um valor para z:");
String z1 = in.next();
expressao = expressao.replace("z", z1);
}
else{
System.out.println(expressao + " = " + String.valueOf(res(expressao)));
}
}
public static boolean Parenteses(){
int abrepar = expressao.replaceAll("[^(]", "").length();
int fechapar = expressao.replaceAll("[^)]", "").length();
if(abrepar != fechapar){
return false;
}
return true;
}
static Vector<String> Tokens(String expressao){
Vector<String> r = new Vector<String>();
StringTokenizer exp1;
exp1 = new StringTokenizer(expressao, "()+-*/", true);
while(exp1.hasMoreTokens()){
String exp2 = exp1.nextToken();
r.addElement(exp2);
}
return r;
}
static Vector<String> Conv(Vector<String> v){
Vector<String> r = new Vector<String>();
Stack<String> p = new Stack<String>();
for(int i = 0; i < v.size(); i++){
String t = (String) v.elementAt(i);
if(t.equals("*") || t.equals("/") || t.equals("+") || t.equals("-")){
p.push(t);
}
else if(t.equals(")")){
r.addElement(p.pop());
}
else if(!t.equals("(")){
r.addElement(t);
}
}
return r;
}
static int res(String expressao){
Vector<String> v = Tokens(expressao);
v = Conv(v);
Stack<String> p = new Stack<String>();
for(int i = 0; i < v.size(); i++){
String t = (String) v.elementAt(i);
if(t.equals("+")){
int e2 = Integer.parseInt(p.pop());
int e1 = Integer.parseInt(p.pop());
p.push(String.valueOf(new Integer( e1 + e2)));
}
else if(t.equals("-")){
int e2 = Integer.parseInt(p.pop());
int e1 = Integer.parseInt(p.pop());
p.push(String.valueOf(new Integer(e1 - e2)));
}
else if(t.equals("*")){
int e2 = Integer.parseInt(p.pop());
int e1 = Integer.parseInt(p.pop());
p.push(String.valueOf(new Integer(e1 * e2)));
}
else if(t.equals("/")){
int e2 = Integer.parseInt(p.pop());
int e1 = Integer.parseInt(p.pop());
p.push(String.valueOf(new Integer(e1 / e2)));
}
else{
p.push(String.valueOf(new Integer(t)));
}
}
return (Integer.parseInt(p.pop()));
}
}