JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Re:JAVA計算機要怎麼做 [Re:123]
sungo

瘋狂口罩大盜



發文: 822
積分: 17
於 2004-05-25 05:37 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
以前有想過作個簡單計算器,但因為都在忙其他事...所以一直沒實作,
在這裡提出我的構想,希望大家也能談談自己的想法...

執行模式:
第一種:採跟Windows內建的小算盤同樣的執行模式,TextBox僅作
顯示用不能作輸入,全部由Button來輸入運算子、運算元以及函數
。優點:邏輯設計較簡單,例如運算三角函數sin 60 (角度),只要
在"Sin" Button的KeyPress事件裡,抓TextBox值60轉成弳度後放入
sin()方法作運算再將結果輸出到TextBox即可、加減乘除作法:例如
加法的運算,在"+" Button的KeyPress事件裡要作2件事,1.抓取
TextBox的值與堆疊頂端的值相加,2.將結果輸出至TextBox並放至堆疊
頂端。(必須在"+" Button 的KeyPress執行前,先將TextBox預設值0放
至堆疊頂端),例1+2+3+...n的運算過程如下:
操作鍵:..... 堆疊內容:.......TextBox顯示:
無...............0.....................0
1................0.....................1
+................0..1.................1
2................0..1.................2
+................0..1..3.............3
3................0..1..3.............3
+............... 0..1..3..6.........6
4................0..1..3..6.........4
+................0..1..3..10.......10
......(以此類推)

缺點:無法由TextBox輸入,較缺乏彈性。在這裡偷偷告訴大家一個Windows小算
盤的小秘訣:雖然它的TextBox無法由鍵盤輸入,但熱鍵還是可以用的,也就是
說只要我們在Editor將運算式用Ctrl+C複製下來用Ctrl+V貼在小算盤的TextBox
上,它還是可以正確地計算出結果的。(貼上後按"="鍵答案就出來了)

第二種:也就是我想要實作的類型,TextBox除了作輸出用以外,還可兼作輸入
。運算的核心類別Arithmetic,包含下列基本功能:(可以一直擴充)

1.基本的四則運算:如(-1+9)*87/3.14。
看要用中序式轉後序式利用堆疊作或是用Token的方式作都可以
,我應該會用Token,因為我比懶喜歡用之前已經作好的東西。

2.sin cos tan (角度的三角函數)
3.sinr cosr tanr (弳度<Radians>的三角函數)
4.asin acos atan (角度的反三角函數)
5.asinr acosr atanr (弳度的反三角函數)
6.rtod (弳度轉角度)
7.dtor (角度轉弳度)
8.sqrt (開根號)
以上用java.lang.Math就可輕鬆解決。

9.log (底數10的對數)
1
2
3
public static double log(double number) {
        return (Math.log(number) / Math.log(10));
}

10.ln (自然對數)
1
2
3
public static double ln(double e) {
        return (Math.log(e));
}

11.n (階乘)
大階層時數字會很大,所以用java.math.BigInteger來作。

12.d2b <decimal to binary> (十進制轉二進制)
13.b2d <binary to decimal> (二進制轉十進制)
14.d2o <decimal to octal> (十進制轉八進制)
15.o2d <octal to decimal> (八進制轉十進制)
16.d2h <decimal to hex> (十進制轉十六進制)
17.h2d <hex to decimal> (十六進制轉十進制)
以上可用java.lang.Integer、java.lang.String處理
或是要自己寫邏輯處理也可。

18.AND OR XOR NOT (位元運算功能)
java裡的用法AND &、OR |、XOR ^、NOT ~

19.squa <square> (某數的平方)
用java.lang.Math.pow(double a, double b) -double b 參數用2

20.sinh cosh tanh (雙曲線函數)
sinh x=0.5(ex - e-x)
cosh x=0.5(ex + e-x)
tanh x= sinh x / cosh x

21.logxy <logx Y> (底數為x的y對數)
1
2
3
4
5
public static double log(double x, double y) {
    double top = Math.log(y);
    double bottom = Math.log(x);
    return (top / bottom);
}

22.xpowy <X Pow Y> (X的Y方)
直接使用java.lang.Math.pow(double a, double b)

23.xsqrty <X Sqrt Y> (X開Y方)
1
2
3
public static double xsqrty(double x, double y) {
    return Math.pow(x, (double) 1 / (double) y);
}


在第二種執行模式中,Button的KeyPress事件僅需將對應的函數字串
插入至TextBox,重點在於怎麼處理TextBox裡的運算式,這也是最複雜
的部分。例如我們在TextBox輸入10*sin60+100,當focus在TextBox
時按下Enter鍵或是按下"=" Button後即要計算出108.660254037844的
答案並顯示於TextBox中。該case我的作法:先用Token設計一個邏輯,
抽出sin60作處理,再結合成10*8.660254037844+100,再送入先前設計
的四則運算處理method,即可算出答案。當然這只是sin結合其它運算子
作運算而已,如果有更多的函數結合在一起時,處理的狀況必會更加複
雜。


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
7398 JAVA計算機要怎麼做 123 46 2004-05-25 00:29
6548 Re:JAVA計算機要怎麼做 anthonycs 92 2004-05-25 00:36
6475 Re:JAVA計算機要怎麼做 sungo 154 2004-05-25 00:54
13892 Re:JAVA計算機要怎麼做 sungo 3010 2004-05-25 05:37
» JWorld@TW »  Java 新手區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8