任务四
遇到的问题
-
初次应用后缀表达式进行混合运算,对堆栈的使用并不熟练,所以在了解基本算法过程以后在网上找到了对应的代码进行使用
-
因为网上找到的代码输入方式和我设计的方式并不一样,所以在更改输入方式的过程中遇到了问题。原来的代码采用键盘直接输入的方式,所以可以在输入的时候就分开所需的常量进行入栈和计算。但是我是在主函数中先生成String类型的复合运算的算式,再调用到转换函数时直接入栈的话会导致整个String字符串一起入栈,没有办法依次入栈排序。
-
后缀表达式的计算当中只能以整数形式运算,不能精确到小数
-
merge方法在github desktop上没有对应的GUI,不知道如何实施
-
在后缀表达式的转换中,由于执行的是
- 若比运算符堆栈栈顶的运算符优先级高或相等,则直接存入运算符堆栈。
- 若比运算符堆栈栈顶的运算符优先级低,则输出栈顶运算符到操作数堆栈,并将当前运算符压入运算符堆栈。
导致当生成连减或连加的计算式时,例1-2+3会变成123+-而不是正确的12-3+ 导致运算错误,在有除法的情况下还有可能造成除数为0的情况。
解决方法
- 在网上搜索到相应的代码进行挑选之后选择较为简洁且易于理解的代码进行使用,在一定程度上保证效率的同时,也能帮助自己理解后缀表达式的转换和计算方法如何用代码实现。
- 为了解决整体输入的问题,首先想到的就是把字符串根据空格进行分隔。一开始使用字符数组进行分隔,但是linkedlist不支持字符数组的形式,在经过搜索以后改用字符串数组进行分隔
String a[]=x.split(" ");
进行分隔以后再逐个循环输入list中,因为提前在末尾增加了"#"作为标志符,所以用while控制循环输入。 - 在搜索以后找到了merge命令的命令行方法,常用的有两种合并方法,我选择的是--no-f的快速合并方法。
git checkout master //切换到master分支
git merge --no-f [分支名] //对分支进行合并
-- 引用自 git merge简介
- 在遇到运算符优先级相等的情况下应该按照输出栈顶运算符到操作数堆栈,并将当前运算符压入运算符堆栈的方式进行处理,所以我在我判断条件中对等号的位置进行了调换
没有解决的问题
-
本来尝试过将代码中的int类变量改写成double类的变量,但是总是会报错,像是数据格式不匹配,目前还没有解决这个问题。
-
以及我已经把相应的代码上传到对应分支中并且也已经和master合并,可能的延迟的原因在我github主页并没有出现相应的改动,这也让我感到迷惑。