Ich habe ein Taschenrechner -Applet entdeckt, das ich im College geschrieben habe, und es gibt auch eine grafische Schnittstelle, die Expressionsyntaxbäume grafisch anzeigen kann, haha;)
Nur 200 Zeilen Java -Code können nicht nur Addition, Subtraktion, Multiplikation und Division berechnen, sondern auch Klammern übereinstimmen ~
Codekommentare:
Von einfachen Schnittstellenfarben bis hin zu einfachen und leicht verständlichen Fehleraufforderungen spiegeln alle zuerst das Designkonzept der "Benutzererfahrung" wider. Die Code -Ausnahmebehandlung ist umfassend und angemessen, ohne undicht, Code -Eindrückung ist elegant und großzügig. Variable Benennung ist intuitiv und leicht zu verstehen. In Kombination mit moderaten und einfachen Kommentaren gibt das Gesamtprogramm den Menschen ein neues und raffiniertes Gefühl. Es ist nicht schwierig, die Liebe des Autors zum Lernen und seine Forderung nach Design zu erkennen, die den Handwerkergeist zeigt. Es ist wirklich ein Modell für die Anwendung von Datenstrukturen im College!
Der Implementierungscode lautet wie folgt:
Import Java.awt.BorderLayout; Import Java.awt.Color; Import Java.awt.graphics; Import Java.awt. Das Calculator -Programm für die grafische Schnittstelle kann nur Addition, Subtraktion, Multiplikation und Teilung berechnen, und es können Klammern in der Gleichung bestehen. numerisch kann dezimal sein */public class calcgui erweitert JFrame {private statische endgültige long serialversionuid = 1l; private Treenode resulttree; private String textFieldString; privat boolescher calcSuccess = true; private char ops [] [] = {{{{{{'>', '>', '<', '<'> ','> ',' <','> ', <', '>', <',>', '<', '>', <'>' '>', '<', '>', '<', '>', '<', '>', '<'> ',' <','> ','> '}, {'> ','> ',>', '>', '< 'E'}, {'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e'}, {'<', '<', '<', '<', 'E', '='},}; Stack <Treenode> nodeStack = new Stack <Treenode> (); Stack <Charakter> opSstack = New Stack <Charakter> (); publicStaticVoidMain (String [] args) {calcGui gui = new calcGui (); gui.usergui (); } publicVoidusergui () {this.setLayout (new BorderLayout ()); Textfield tf = new textField ("Bitte geben Sie den Ausdruck ein, drücken Sie die Eingabetaste, um die Berechnung zu starten.", 40); tf.Selectall (); tf.getText (); tf.addkeyListener (neuer keyAdapter () {publicVoidKeyPressed (keyEvent e) {if (e.getKeyCode () == keyEvent.vk_enter) {textfieldString = ((textield) 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; Privat int -Durchmesser = 25; publicVoidPaint (Grafik g) {Super.Paint (g); if (calcSuccess) {if (resulttree! int rootBeginx = this.getWidth () / 2; int rootBeginy = 100; Punkt p = neuer Punkt (RootBeginx, RootBeginy); Dractree (g, resulttree, p, this.getWidth () / 2 - 20, p); }} else {g.setColor (color.red); g.drawstring ("Expressionsyntax ist falsch!", 10, 80); }} privateVoidDrawcircle (Grafik G, Punkt P, int r) {g.dravoval (px - r, py - r, r * 2, r * 2); } privateVoidDrawtree (Graphics G, Treenode -Knoten, Punkt PME, int Breite, Punkt pfather) {if (node == null) return; // system.out.println ("In Dractree, node.value =" + node.value + ", node.op =" + node.op); g.setColor (color.green); this.drawcircle (G, PME, Durchmesser / 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 - Durchmesser / 2, pme.y); } DraffyTree (g, node.lft, neuer Punkt (pme.x - width / 2, pme.y + LevelHeight), Width / 2, PME); Drawtree (g, node.rt, neuer Punkt (pme.x + width / 2, pme);} public treenode calc (String Instrument) löst eine Ausnahme aus {opSstack.push ('#'); StringBuilder buf = new StringBuilder (); int i 0; while (i <instr. == '.') {// number buf.delete (0, buf.length ()); nodesStack.push (neue Treenode (Nummer)), wenn (instrument "(i) == '') {i ++; 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 () doppelt rs 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 Wert) this.value = Wert; privatZusammenfassen
Die oben genannten sind die 200 Zeilen von Java -Code, die vom Editor eingeführt wurden, um ein Taschenrechnerprogramm zu schreiben. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung bei Wulin.com!