我正在尝试创建一个程序,将表达式作为String并解决它。因此,如果输入是3 + 5,它将返回8.我已经完成了大部分编码,但我不确定为什么我一直在Java中获得UnsupportedOperationExpression。如果可以的话请帮忙!
**此外,我必须在此作业中使用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);
}
}
再次感谢您的帮助!
答案 0 :(得分:2)
如果你从像这样的数组构建List
List<String> itemList = Arrays.asList(items)
返回的列表不允许从列表中删除项目
itemList.remove(zz + 1); // throws java.lang.UnsupportedOperationException
相反,创建一个支持删除的空列表并将所有数组元素添加到它:
List<String> itemList = new java.util.ArrayList<>();
java.util.Collections.addAll(itemList, items);
答案 1 :(得分:0)
尝试阅读反向抛光表示法算法。它似乎完全符合您的需求,您只需要实现它。