
Ayuda en calculadora
Publicado por Viviana (5 intervenciones) el 04/03/2015 05:16:49
Hola, tengo un mega problema, he intentado resolverlo pero no he podido, tengo un método que recibe un char como parámetro del teclado (tengo entendido que me regresa el ASCII de la tecla), y tengo dos pilas, una de número y otra de operadores, como sabemos, los operadores llevan una precedencia y la puse usando un HashMap, en el método meto el operador a la pila, pero viendo primero su precedencia, me marca un error al comparar y no se como resolver, dejo parte del código y espero puedan ayudarme .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public class Evaluador {
Stack<Double> num=new Stack<Double>();
Stack<Character> op=new Stack<Character>();
Map<Character,Integer>inprec;
Map<Character,Integer>outprec;
double registro=0;
String signo;
Estado estado=Estado.INI;
int par_cont;
Evaluador(){
inprec=new HashMap<Character,Integer>();
inprec.put('(', 0);
inprec.put('+', 1);
inprec.put('-', 1);
inprec.put('/', 2);
inprec.put('*', 2);
outprec=new HashMap<Character,Integer>();
outprec.put('(', 3);
outprec.put('+', 1);
outprec.put('-', 1);
outprec.put('/', 2);
outprec.put('*', 2);
}//CloseContructor
public void opera (char ope){
if(op.peek()==null || inprec.get(op.peek())<inprec.get(ope)){
log("Operador metido a la pila");
}else{
if(inprec.get(op.peek())>inprec.get(ope)){
double num1=num.pop();
double num2=num.pop();
char oper=op.pop();
if(oper=='+'){
registro=num2+num1;
num.push(registro);
log("Operador de suma");
}else if(oper=='-'){
registro=num2-num1;
num.push(registro);
log("Operador de resta");
}else if(oper=='/'){
registro=num2/num1;
num.push(registro);
}else if(oper=='*'){
registro=num2*num1;
num.push(registro);
}
}
}
}
}
//Hay omision de los demás métos
/**Clase de la calculadora(ventana)*/
public void keyPressed(KeyEvent evt) {
char C;
C=evt.getKeyChar();
if(C==KeyEvent.VK_ENTER){
C='=';
}
if(C==KeyEvent.VK_DELETE || C==KeyEvent.VK_CLEAR){
C='c';
}
if(C>=48 && C<=57){
eva.procesa(C);
}
Valora esta pregunta


0