Descobri um applet da calculadora que escrevi na faculdade, e também há uma interface gráfica que pode exibir graficamente as árvores de sintaxe da expressão, haha;)
Apenas 200 linhas de código Java podem não apenas calcular a adição, subtração, multiplicação e divisão, mas também parênteses de combinação ~
Comentários de código:
Desde a correspondência simples de cores da interface até os avisos de erro simples e fáceis de entender, todos refletem o conceito de design de "experiência do usuário" primeiro; O manuseio de exceção do código é abrangente e razoável, sem vazamento, o indentação do código é elegante e generoso, a nomeação variável é intuitiva e fácil de entender; Combinados com comentários moderados e simples, o programa geral oferece às pessoas um sentimento novo e refinado. Não é difícil ver o amor do autor pelo aprendizado e sua demanda por design, que mostra o espírito do artesão. É realmente um modelo para aplicar estruturas de dados na faculdade!
O código de implementação é o seguinte:
importar java.awt.borderlayout; importar java.awt.color; importar java.awt.graphics; importar java.awt.point; importar java.awt.textfield; import java.awt.event.keyadapter; import.awt.event.keyevent; importen; O programa da calculadora para a interface gráfica pode calcular apenas adição, subtração, multiplicação e divisão, e pode haver colchetes na equação. Numérico pode ser decimal */classe pública calcgui estende JFrame {private estático final serialversionuid = 1L; Treenode Private ResultTree; String private String TextFieldString; calcsuccess booleano privado = true; private char ops[][] = { { {'>', '>', '<', '<', '>', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '>'}, {'>', '>', '>', '>', '<', '>', '>'}, {'<', '<', '<', '<', '<', '<', '<', '=', 'E'}, {'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e'}, {'<', '<', '<', '<', 'e', '=},}; Stack <reenode> nodessTack = new Stack <Treenode> (); Stack <Acfaracter> opsstack = new Stack <personagem> (); publicstaticVoidMain (string [] args) {calcgui gui = new calcgui (); Gui.UserGui (); } publicVoidUSERGUI () {this.setLayout (new BorderLayout ()); TextField tf = new TextField ("Digite a expressão, pressione Enter para iniciar o cálculo ~", 40); tf.Selectall (); tf.getText (); tf.addkeyListener (new KeyAdapter () {publicVoidKeyPressed (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 (true); this.setVisible (true); } private int LevelHeight = 60; private int diâmetro = 25; publicVoidPaint (Gráfico G) {super.paint (g); if (calcsuccess) {if (resultTree! = null) {g.drawString ("Calcule o resultado:" + resulttree.value, 10, 80); int rootbeginx = this.getWidth () / 2; int rootbeginy = 100; Ponto p = novo ponto (rootbeginx, rootbeginy); drawtree (G, ResultTree, P, this.getWidth () / 2 - 20, p); }} else {g.setColor (color.red); G.DrawString ("A sintaxe da expressão está incorreta!", 10, 80); }} privateVoidDrawcircle (gráficos G, Point P, Int R) {G.Drawoval (PX - R, PY - R, R * 2, R * 2); } PrivateVoidDrawtree (gráficos G, nó Treenode, Point PME, int Warth, Point Pfather) {if (node == null) return; // System.out.println ("em drawtree, node.value =" + node.value + ", node.op =" + node.op); 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, new Point (PME.X - Width / 2, PME.Y + LevelHeight), Width / 2, PME); drawtree (g, node.rt, new Point (PME.X + Width / 2, PME);} Treenode public calc (String Instr) lança exceção {opsstack.push ('#'); stringbuilder buf = new StringBuilder (); == '. NodessTack.Push (Número de Treenode); 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){ case '+': return 0; case '-': return 1; case '*': return 2; case '/': return 3; case '(': return 4; case ')': return 5; case '#': return 6; default : return -1; } }}class TreeNode{ public double value; public char op = 'E'; public TreeNode lft; public TreeNode rt; public TreeNode(double Valor) {Treenode Public Treenode (Valor duplo, Treenode, Treenode RT) privateVoidout (nó Treenode) {if (node == NULL) Return;Resumir
O exposto acima são as 200 linhas de código Java introduzidas pelo editor para escrever um programa de calculadora. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao wulin.com!