Descubrí un applet de calculadora que escribí en la universidad, y también hay una interfaz gráfica que puede mostrar gráficamente los árboles de sintaxis de expresión, jaja;)
Solo 200 líneas de código Java no solo pueden calcular la adición, resta, multiplicación y división, sino también de los soportes de coincidencia ~
Comentarios del código:
Desde una simple coincidencia de color de la interfaz hasta indicaciones de error simples y fáciles de entender, todos reflejan el concepto de diseño de "experiencia del usuario" primero; El manejo de excepciones de código es integral y razonable, sin filtración, la sangría del código es elegante y generosa, el nombre variable es intuitivo y fácil de entender; Combinado con comentarios moderados y simples, el programa general brinda a las personas un sentimiento fresco y refinado. No es difícil ver el amor del autor por el aprendizaje y su demanda de diseño, lo que muestra el espíritu artesano. ¡Es realmente un modelo para aplicar estructuras de datos en la universidad!
El código de implementación es el siguiente:
import java.awt.bordayout; import java.awt.color; import java.awt.graphics; import java.awt.point; import java.awt.textfield; import java.awt.event.ekeyApter; import java.awt.event.keyevent; import java.util.stack; import javax.swing/shame. El programa de calculadora para la interfaz gráfica solo puede calcular la adición, sustracción, multiplicación y división, y puede haber soportes en la ecuación. Numérico puede ser decimal */public class CalcGui extiende jframe {private static final long SerialVersionUid = 1l; TreeNode ProtTree privado; Cadena privada TextFieldString; Private Boolean CalcSuccess = True; private char ops[][] = { { {'>', '>', '<', '<', '>', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', ',>', '<', '>', '<', '>', '<' ','> ',' <','> ','> ', {' '>', '>', '>', ',', '<', ','> ','> '}, {' '<', '', '<' '', <', <', '<', <',', ',' ', <', '', <'', <', <', <',', ' 'E'}, {'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e'}, {'<', '<', '<', '<', 'e', ','},}; Pila <Teenode> nodesStack = new Stack <TeNode> (); Pila <caracteres> opsstack = new Stack <arport> (); publicstaticvoidmain (string [] args) {calcGui Gui = new CalcGui (); Gui.usergui (); } publicvoiduserGui () {this.setLayout (new BorderLayout ()); TextField tf = new TextField ("Ingrese la expresión, presione Entrar para iniciar el cálculo ~", 40); tf.selectall (); tf.gettext (); tf.AddkeyListener (nuevo KeyAdapter () {publicVoid KeyPissed (KeyEvent e) {if (e.getKeyCode () == keyEvent.vk_enter) {textFieldString = ((textField) e.getComponent (). "#") this.Add (TF, BorderLayout.north); this.setsize (500, 500); this.settitle ("calc GUI"); this.setDefaultCloseOperation (jframe.exit_on_close); this.setResizable (verdadero); this.setVisible (verdadero); } private int niveleight = 60; Diámetro intivate int = 25; publicVoidPaint (Graphics g) {super.paint (g); if (calcSuccess) {if (resulttree! = null) {g.drawstring ("Calcule el resultado:" + resulttree.value, 10, 80); int rootbeginx = this.getWidth () / 2; int rootbeginy = 100; Punto p = nuevo punto (rootbeginx, rootbeginy); Drawtree (G, resulttree, P, this.getWidth () / 2 - 20, p); }} else {g.setColor (color.red); G.DrawString ("La sintaxis de expresión es incorrecta!", 10, 80); }} privateVoidDrawCircle (Graphics G, Point P, Int R) {G.Drawoval (Px - R, Py - R, R * 2, R * 2); } privateVoidDrawTree (Graphics G, TreeNode Node, Point PME, int Width, Point Pfather) {if (node == null) return; // system.out.println ("en dibujos G.SetColor (color.green); this.DrawCircle (G, PME, diámetro / 2); G.Drawline (pme.x, pme.y, pfather.x, pfather.y); if (node.op! = 'e') {g.setColor (color.black); G.DrawString (String.ValueOf (node.op), pme.x, pme.y); } else {g.setColor (color.black); G.DrawString (String.ValueOf (node.value), pme.x - diámetro / 2, pme.y); } Drawtree (g, node.lft, nuevo punto (pme.x - width / 2, pme.y + nivelheight), ancho / 2, pme); DrawTree (g, node.rt, nuevo punto (pMe.x + width / 2, pme);} public treeNode calc (String Instr) lanza excepción {opsstack.push ('#'); stringBuilder buf = new StringBuilder (); int i = 0; while (I <INSTR.LInggth ()) {if (caracteres.isDigit (instr.Charat (i) | == '.') {// número buf.delete (0, buf.length ()); NodessTack.push (nuevo treeNode (número); opFormer = opsStack.peek(); int subFormer = getSub(opFormer); switch(ops[subFormer][subNew]){ case '=': goOn = false; opsStack.pop(); break; case '<': goOn = false; opsStack.push(op); break; case '>': goOn = true; TreeNode n1 = nodesStack.pop(); TreeNode n0 = nodesstack.pop (); NodessTack.pop (); c) {Switch (C) valor) {this.value = valor; privateVoidOut (nodo de treenode) {if (node == null) return;Resumir
Lo anterior son las 200 líneas del código Java introducido por el editor para escribir un programa de calculadora. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo a wulin.com!