Código fuente de Sta350
import java.awt.*;
import java.awt.event.*;
import java.util.*;
Pila de clases
{
Cadena s[]=nueva cadena[100];
int n = 0;
p>
public void InQuece(String cadena)
{
s[n]= str;
n;
}
Cadena pública DeQuece()
{
return s[-n];
}
Frontal de cadena pública()
{
return s[n-1];
}
Sprint vacío público ( )
{
for(int I = n-1; i gt=0; i-)
system out . ] " ");
sistema . println();
}
}
Calculadora de clase pública
{
marco estático frm = nuevo marco("calculadora");
//TextField estático TFF = nuevo TextField(20);
estático etiqueta laboratorio = nueva etiqueta("0.
");
Panel de panel estático = new Panel();
Etiquetas de cadena estáticastr =
Cadena estática ltemp =
static int flag = 1;
Botones estáticos b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b16, b12, b13, b14, b15, b16, b17, b18. , b65438
Public void setFrame()
{
frm.setBounds(300, 150, 400, 350); . establecer diseño (nulo);
frm . addwindowlistener(nueva ventana());
frm
b0 = Nuevo botón. (" 0 "); b 1 = Nuevo botón (" 1 "); b2 = Nuevo botón (" 2 "); b3 = Nuevo botón (" 3 "); botón (" 5 "); b6 = Nuevo botón (" 6 ");
b7 = Nuevo botón (" 7 "); b8 = Nuevo botón (" 8 "); 9 ");
b 10 = Botón Nuevo (" "); b 11 = Botón Nuevo ("-"); b 12 = Botón Nuevo (" * "); b 13 = Botón Nuevo (" /"); b 14 = Botón Nuevo (" AC "); b 15 = Botón Nuevo (" C "); b 16 = Botón Nuevo (" = ");
b 17 = Botón Nuevo ( "("); b 18 = Nuevo botón (")"; b 19 = Nuevo botón (" RE "
lab.setBounds(0, 30, 400, 40); p>
Lab.setFont(newFont("ì",Font.plain,30));
lab.setAlignment(label.
Derecha);
pan.setBounds(0, 60, 400, 300);
pan.setLayout(new GridLayout(5, 4));
B0. addactionlistener(nueva acción()); b 1. addactionlistener(nueva acción()); B2. addactionlistener(nueva acción()); ;
b5 . addactionlistener(nueva acción()); B6 . addactionlistener(nueva acción()); B7 . addactionlistener(nueva acción()); addactionlistener(nueva acción());
b 10. addactionlistener(nueva acción()); b 11. addactionlistener(nueva acción()); . addactionlistener(nueva acción()); b 14. addactionlistener(nueva acción());
b 15. addactionlistener(nueva acción()); 17. addactionlistener(nueva acción()); b 18. addactionlistener(nueva acción()); b 19. addactionlistener(nueva acción());
pan add(b 1); (B2); sartén agregar (b5); sartén agregar (b 11); agregar(B7);pan . agregar(b8);pan agregar(B9);pan agregar(b 12);
pan . agregar(b 15);pan . agregar(b 13);pan agregar(b 19);
frm.add(lab);
frm.add(pan);
}
Doble cal pública (cadena)
p>{
str=str.trim().
tokenizer de cadena ST = tokenizer de cadena nuevo(str, "-*/", true
Stack sta = new Stack()
String s); , s1, S2;
while(st.hasMoreTokens())
{
s = ST . if(s.equals(" # ")
Pausa;
if(s.equals(" ")
Continuar;
Si (!(s . es igual(" " | | s . es igual("-" | | s . es igual("/)| | s . es igual(" * "))
{< / p>
sta.consulta;
}
else if(s.equals(" ")
{
s2 =sta.DeQuece();
s1=sta.DeQuece();
doble d 1 = doble . analizar doble(s 1);
doble D2 = doble . analizar doble(S2);
d 1 = d 1 D2;
sta. p>
else if(s.Equal("-")
{
s2=sta.DeQuece();
s1=sta . DeQuece();
doble d 1 = doble . analizar doble(s 1);
doble D2 = doble . analizar doble(S2); 1 = d 1-D2;
sta.(" d 1);
}
else if(s.Equals("/")
{
s2=sta.DeQuece();
s1=sta.DeQuece();
doble d 1 = doble . analizar doble(s 1);
doble D2 = doble . analizar doble(S2);
d 1 = d 1/D2;
sta. InQuece(" d 1);
}
else if(s.equals("* "))
{
s2 =sta.DeQuece();
s1=sta. DeQuece();
doble d 1 = doble . analizar doble(s 1);
doble D2 = doble . analizar doble(S2);
d 1 = d 1 * D2
sta. /p>
}
s=sta.
DeQuece();
Devuelve double . parse double(s);
}
Cadena pública InfixToPostfix(string s)
{
String restr =
String temp =
tokenizador de cadena ST = nuevo tokenizador de cadena(s, "-/*#()", true);
Pila sta = nueva Pila();
sta. InQuece(" # ");
while(st.hasMoreTokens())
{
temp = ST . p>if(temperatura es igual a (" # ")
{
mientras(verdadero)
{
Cadena t=sta. DeQuece();
if(t.equals("# ")
{
Romper;
}
restr = restr t " ";
}
Romper;
}
else if(temp.equals( " ")
Continuar;
si no(!(temp . es igual("(")| | temp . es igual(")" | | temp . es igual(" ") | | temp es igual("-")| temp es igual("/))
{
restr = restr temp " ";
} /p>
si no(temp.equals()")
{
mientras(verdadero)
{
Cadena t=sta.DeQuece();
if(t.equals("(")
Romper;
Otro
{
restr = restr t " ";
}
}
}
si no( temp . es igual("(")| | temp . es igual(" " | | temp . es igual("-")| | temp . es igual("/))
{
mientras(ICP(temp) lt;=isp(sta.Front()))
{
Cadena t=sta.DeQuece();
restr = restr t " ";
}
sta.
sprint();
}
Devolver restr
}
Público int icp(cadena s)
{
if(s .equal to (" # ")
Devuelve 0;
else if(s .equal to ("()"))< / p>
devuelve 7;
si no(s . es igual(" * ")| | s . es igual("/")
Devuelve 4;
de lo contrario si(s . es igual a(" ")| | s . es igual a("-")
devuelve 2;
de lo contrario si(s.equals(") " )
Retorno 1;
Otro
retorno-1;
}
Int público isp( char String s)
{
if(s . es igual a (" # ")
Devuelve 0;
si no (s . Equals("()"))
Devuelve 1;
si no(s . es igual(" * ")| | s . es igual("/") p>
devuelve 5;
si no(s . es igual(" ")| | s . es igual("-")
devuelve 3;
else if(s.equals()")
return 7;
Otro
return-1;
}
Public static void main(String args[])
{
Calculadora c = new Calculator();
c . frame ();
system out . println(c . cal(c . infix topostfix(" 1 *(2 3/4)* 10 # "));
}
La operación de clase estática implementa ActionListener
{
Se ha ejecutado una operación pública no válida (evento de operación e)
{
Botón bu =(Botón)e . getsource();
//ltemp = etiquetastr;
if(flag==1)
{ p>
labelstr =
bandera = 0;
}
if(bu==b0)
labelstr = etiquetastr " 0 ";
else if(bu==b1)
labelstr = etiquetastr " 1 ";
else if(bu==b2)
labelstr = etiquetastr " 1 ";
else if(bu==b2)
p>labelstr = etiquetastr " 2 "
else if(bu==b3)
labelstr = etiquetastr " 3 ";
else if (bu==b4)
labelstr = etiquetastr " 4 ";
si no(bu==b5)
labelstr = etiquetastr " 5 ";
si no(bu==b6)
etiquetastr = etiquetasetiqueta " 6 ";<
/p>
si no(bu==b7)
labelstr = etiquetastr " 7 ";
si no(bu==b8)
etiquetastr = etiquetastr " 8 ";
else if(bu==b9)
labelstr = etiquetastr " 9 ";
else if(bu==b10 )
labelstr = etiquetastr " ";
else if(bu==b11)
labelstr = etiquetastr "-";
else if(bu==b12)
labelstr = etiquetastr " * ";
else if(bu==b13)
labelstr = etiquetastr "/" ;
else if(bu==b14)//AC
{
ltemp = etiquetastr
labelstr="0.;
bandera = 1;
}
si no(bu==b15)//C
{
labelstr=labelstr.substring(0, etiquetastr . length()-1);
if(labelstr.length()==0)
{
labelstr="0. ;
bandera = 1;
}
}
si no(bu==b16)//=
{
ltemp = etiquetastr
doble b = nueva Calculadora(). cal(newcalculator().infix topostfix(labelstr " # ");
labelstr = " " b;
lab . settext(labelstr);
bandera = 1;
Devolver;
}
si no(bu==b17)
{
etiquetastr = etiquetastr "(";
}
else if(bu==b18)
{
labelstr = etiquetastr ") ;
}
else if(bu==b19)
{
labelstr = ltemp
}
lab . settext(labelstr);
}
}
Extensión de ventana de clase estática WindowAdapter
{
Cierre de ventana nula pública (WindowEvent e)
{
frm .dispose();
system(0);
}
}
}