简单计算器算法 转

定义一链表(LinkedList)负责存储数据:第一和第三为操作数,第二个节点是运算符;
定义一boolean变量负责记录等号是否按下。

当点击数字键时:
1。如果链表为空时,将数加入到链表,是否按下等于号设为false;
2。如果链表长度为1,即处于正在输入第一个操作数情况,用getFirst()方法将其取出,并将String的concat()方法将数字加到其后重新存入第一个节点;
3。如果链表长度为1,且按下了等于键,则将链表中原数清空removeFirst(),将当前按键数值存入;
4。如果链表长度为2,表示已经输入了第一个操作数和一个操作符,则此输入为第二个操作数的第一个数字,将它放入第三个节点;
5。如果已有三个节点,则此次输入为第二个操作数的继续,应用同2的方法将它添加到第三个节点。

当按键为操作符键时:
1。如果此时链表只有1个节点,则将此符放入第二个节点;
2。如果此时已有2个节点,即已有了操作符,则说明要改变操作符,以此替换第2个节点已有内容;
3。如果此时已有3个节点,则取出两操作数(转化为double数值Double.parseDouble()),和符号进行计算。然后清空链表,将结果作为第一个节点的内容,作为新的操作数。

当按键为等于号时:先将等于按下标志置为true,然后:
1。当链表长度为1或2等不合法长度时,不进行其他处理;
2。当长度为3时,取值并运算(同上3);

当按键为小数点时:
1。空链时,只将等于按下标志置为false;
2。长度为1,3时分别对一、三操作数进行操作:循环查找是否已经有小数点,若有不操作,若无,连接到相应项后

当按键为退格符时:
长度为1,3时分别对一、三操作数进行操作:
若该节点的长度大于或等于1,则设置其值为原内容字符串的字串substring(0, num.length()-1);
否则,removeLast()。

当按键为清零按钮时:
等于按下标志置为false,链表清空。

同理考虑:正负号按钮、求倒数按钮等。

用到的较陌生的对象LinkedList的方法有:

getFirst() 
          Returns the first element in this list.

set(int index, E element) 
          Replaces the element at the specified position in this list with the specified element.

removeFirst() 
          Removes and returns the first element from this list.

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页