繁体   English   中英

Java表达式求解器算法

[英]Expression Solver Algorithm with Java

我正在尝试创建一个程序,该程序将一个表达式作为字符串并解决。 因此,如果输入为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);
   }
   }

再次感谢您的帮助!

如果从这样的数组构造一个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);

尝试阅读有关反向抛光符号算法的信息。 它似乎完全可以满足您的需求,您只需实施它即可。

https://en.wikipedia.org/wiki/Reverse_Polish_notation

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM