大学で書いた電卓のアプレットを発見しましたが、式の構文ツリーをグラフィカルに表示できるグラフィカルなインターフェイスもあります。
200行のJavaコードのみが、追加、減算、乗算、および分割を計算できるだけでなく、括弧〜を計算できます〜
コードコメント:
シンプルなインターフェイスの色の一致から、単純でわかりやすいエラープロンプトまで、すべて「ユーザーエクスペリエンス」の設計概念を最初に反映しています。コードの例外処理は包括的で合理的であり、漏れなく、コードインデンテーションはエレガントで寛大であり、可変命名は直感的で理解しやすいです。中程度でシンプルなコメントと組み合わせることで、プログラム全体は人々に新鮮で洗練された感覚を与えます。著者の学習への愛とデザインに対する彼の要求を見るのは難しくありません。これは職人の精神を示しています。それは本当に大学でデータ構造を適用するためのモデルです!
実装コードは次のとおりです。
java.awt.borderlayout; Import java.awt.color; import java.awt.graphics; import java.awt.point; Import java.awt.textfield; Import java.awt.event.keyadapter; Import Java.awt.event.Keyvent; Import java.util.tick.Stack;グラフィカルインターフェイスの電卓プログラムは、追加、減算、乗算、および分割のみを計算することができ、方程式に括弧がある可能性があります。数値は10進数である可能性があります */public class calcguiはjframeを拡張します{private static final long serialversionuid = 1l;プライベートTreenode resultTree;プライベート文字列TextFieldString;プライベートブールCalcsuccess = true; private char ops [] [] = {{{'>'、 '>'、 '<' <'、' <'、'> '、'> '、' <'、'> '、' <'、'> '、' <'、'> '、'> '>'、 '<'、 '>'、 '<'> '' '' '' '' '' '' '' '' '' '' ''、 '>', '<', '>', '<', '>', '<', '>', '<', '>', '<', '>', '>'}, {'>', '>', '>', '>', '<', '>', '>'}, {'<', '<', '<', '<', '<', '<', '<', '=', 'e'}、{'e'、 'e'、 'e'、 'e'、 'e'、 'e'、 'e'、 'e'、 'e'、 'e'}、{'<' <'<' <'、' <'、' e '、' = '}、}; stack <treenode> nodesstack = new stack <treenode>(); stack <character> opsstack = new stack <character>(); publicStaticVoidMain(string [] args){calcgui gui = new calcgui(); GUI.USERGUI(); } publicvoidusergui(){this.setlayout(new borderlayout()); Textfield tf = new Textfield( "式を入力し、Enterを押して計算を開始〜"、40); tf.selectall(); tf.getText(); tf.addkeylistener(new keyadapter(){publicvoidkeypressed(keyevent e){if(e.getkeycode()== keyevent.vk_enter){textfieldstring =((textfield)e.getComponent()e.getComponent())。 } catch(例外e1){calcsucss = false; this.add(tf、borderlayout.north); this.setsize(500、500); this.settitle( "calc gui"); this.setDefaultCloseoperation(jframe.exit_on_close); this.SetSizable(true); this.setVisible(true); } private int levelheight = 60;プライベートINT直径= 25; publicVoidPaint(Graphics G){super.paint(g); if(calcsuccess){if(resulttree!= null){g.drawstring( "結果を計算:" + resulttree.value、10、80); int rootbeginx = this.getWidth() / 2; int rootbeginy = 100;ポイントp = new Point(rootbeginx、rootbeginy); drawtree(g、resulttree、p、this.getWidth() / 2-20、p); }} else {g.setColor(color.red); G.DrawString( "Expression Syntaxは正しくありません!"、10、80); }} privatevoiddrawcircle(グラフィックG、ポイントP、int R){g.drawoval(px -r、py -r、r * 2、r * 2); } privatevoiddrawtree(グラフィックスG、トリーネードノード、ポイントPME、int幅、ポイントpfather){if(node == null)return; // system.out.println( "in drawtree、node.value =" + node.value + "、node.op =" + node.op); g.setcolor(color.green); this.drawcircle(g、pme、diameter / 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 -ameter / 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);} public treeNode calc(string strong strows exception {opsstack.push( '#'); stringbuilder buf = new stringbuilder(); int i = 0; Instr.Charat(i)== '。'){// buf.delete(0、buf.length()); double.tostack.push(number); opsstack()をスローします(opformer)。 case> 'treenode n1 = nodestack.pop();一致するオペレーター: "+op);}} i ++;}} return nodesstack.pop();} privatedoubledoperate(double n0、double n1、char op)throws {switch(op){case '+':return n0+n1; case ' - ':not n1; n1; case:return n1;例外:「 + op){case ' +'} 「e」lft(balue = charode) toString()要約します
上記は、編集者が計算機プログラムを作成するために導入された200行のJavaコードです。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comへのご支援ありがとうございます!