如果不是添加一个负号;
当点击加减乘除运算符号时,可追加;当点击等号时显示表达式结果,并且
将全局变量置为 false,此时输入只能替换。
3.对左半边按钮添加事件:当点击正弦、余弦、正切按钮时,调用 Math 类
里面的正弦、余弦、正切函数;当点击求平方、立方按钮(点击后 append 置为
false)时,将文本框里的字符串转换为 double 型,进行平方、立方,重设为文
本框内容;当点击求倒数按钮时,先判断其是不是 0,是 0 不能求倒数,如果是
1,倒数直接置为 1,如果不是 0 或 1,则转为 double 值,用 1 除以该值。当点
击求阶乘的按钮时,获取文本,调用 Convert 类中的求阶乘的函数;当点击 pi
或 e 是文本框里显示圆周率或自然指数 e 的值;当点击 log 或 ln 时,调用 Math
里面的对应函数;当点击左移或右移时,append 被置为 false,等待输入左移或
右移的位数,当点击了等号后,调用 Convert 类里的左移或右移函数;设置一个
全局变量 prestatu,默认值为 1,代表 10 进制,0 代表十六进制,2 代表八进制,
3 代表二进制,当点击某种进制按钮时,如果文本框不空,会将文本框里的字符
串做相应处理,在根据 prestatu 的值确定从哪个状态装换为此进制,调用 Convert
类里对应的进制装换函数,做完后将 prestatu 的状态值改为当前状态值,作为下一
次判断从哪种进制向哪种进制转换的依据;当点击求 x 的 y 次方按钮时,此时输
入替换第一操作数,点击等号后,调用 Math 类里的 pow 函数;
4.对右半边按钮添加事件:当点击数字按钮或加减乘除及括号正负号按钮,
本系统将判断其是否合法,若合法,在点击等号后调用 Compute 类的计算函数,
计算完成后,将值传回,替换表达式;当点击 Mod(取余)时等待输入的第二
参数将替换第一参数,点击等号后,调用 BigInteger 类里的 mod 函数,显示余数;
当点击 Int 时将文本框里的小数点后的字符串省略掉,达到取整的效果。
(三)、表达式求值:
将文本框中的合法的表达式(此时是字符串)传入 Calculate 函数;
当表达式字符串传进来之后,先正确拆分表达式(如3.5 要作为一个操作数一起
拆出来)存储于 input 数组中。这个拆分主要是利用 String 类里的 substring 函数,
以运算符为边界,当发现运算符时,截取该位与上一个运算符之间的数作为一个
操作数,同时截取该操作符。
正确截取结束后,遍历 input 数组,若是数字,直接进入 post 数组。若是左
括号直接入栈。若是右括号,采用 while 循环判断栈顶是不是左括号,如果不是,
将栈顶元素出栈放入 post 数组中,如过栈顶是左括号,则直接出栈。
如果是加减乘除,先判断栈是否空,如果栈空则直接入栈,采用 while 循环
判断,如果栈不空且栈顶元素优先级高于当前 input[i]的优先级且栈顶不是左括
号时,将栈顶元素出栈放入 post 数组中,当 while 循环条件不成立时,直接入栈。
(四)进制转换:
通过一组单选按钮控制进制间的转换,转换思路:二进制、八进制、十六进
制向十进制转换时调用我写的函数 XTOD(String s,int n),s 为要转化的数,n
代表从 n 进制转换为十进制。采用 for 循环遍历 s 字符串,每次从后截取字符串
的每一位,判断是不是十六进制中的特殊字母,如果是换为对应的数值与
5