我试图创建一个程序,将在一个表达式作为一个字符串,并解决它。所以,如果输入是3 + 5,它将返回8。我已经做了大部分的编码,但我不知道为什么我一直得到一个UncertedOperationExpression在Java中。请帮助,如果你可以!
**我还必须在这个作业中使用ArrayLists,因为我还没有学习列表。这是我目前为止的代码:
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
public class FirstPart {
public static void main(String[] args) {
String sampleString = "1 + 2 + 3 / 2 + 1";
String[] items = sampleString.split(" ");
List<String> itemList = Arrays.asList(items);
System.out.println(itemList);
for(int zz=0; zz<itemList.size(); zz++)
if(itemList.get(zz).equals("*"))
{itemList.set(zz-1,Integer.toString((Integer.parseInt(itemList.get(zz-1))*Integer.parseInt(itemList.get(zz+1)))));
itemList.remove(zz+1);
itemList.remove(zz);
zz--;}
else if(itemList.get(zz).equals("/"))
{itemList.set(zz-1,Integer.toString((Integer.parseInt(itemList.get(zz-1))/Integer.parseInt(itemList.get(zz+1)))));
itemList.remove(zz+1);
itemList.remove(zz);
zz--;}
for(int zz=0; zz<itemList.size(); zz++)
if(itemList.get(zz).equals("+"))
{itemList.set(zz-1,Integer.toString((Integer.parseInt(itemList.get(zz-1))+Integer.parseInt(itemList.get(zz+1)))));
itemList.remove(zz+1);
itemList.remove(zz);
zz--;}
else if(itemList.get(zz).equals("-"))
{itemList.set(zz-1,Integer.toString((Integer.parseInt(itemList.get(zz-1))+Integer.parseInt(itemList.get(zz+1)))));
itemList.remove(zz+1);
itemList.remove(zz);
zz--;}
System.out.println(itemList);
}
}
字符串
再次感谢如果你能帮助!
3条答案
按热度按时间332nm8kg1#
如果从这样的数组构造
List
,字符串
返回的列表不允许从列表中删除项目
型
相反,创建一个支持删除的空列表,并将所有数组元素添加到其中:
型
xjreopfe2#
尝试阅读关于逆波兰符号算法。它似乎做正是你需要的,你只需要实现它。
https://en.wikipedia.org/wiki/Reverse_Polish_notation
qfe3c7zg3#
见我的java程序原件和由Rishi shakya类10日。一个非常强大的表达式求解器可以在BODMAS中轻松执行DMAS。//原件
字符串