下面将练习大量的树操作
package 乒乒乓乓;

import java.io.ObjectInputStream.GetField;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Stack;
/*
* http://blog.csdn.net/yhhazr/article/details/7947962
* */
public class 表达式求值 {
private static int res=0;
public static ArrayList<String> getPostOrder(ArrayList<String> inOrderList){ ArrayList<String> result = new ArrayList<String>();
Stack<String> stack = new Stack<String>();
for (int i = 0; i < inOrderList.size(); i++) {
if(Character.isDigit(inOrderList.get(i).charAt(0))){
result.add(inOrderList.get(i));
}else{
switch (inOrderList.get(i).charAt(0)) {
case '(':
stack.push(inOrderList.get(i));
break;
case ')':
while (!stack.peek().equals("(")) {
result.add(stack.pop());
}
stack.pop();
break;
default:
while (!stack.isEmpty() && compare(stack.peek(), inOrderList.get(i))){
result.add(stack.pop());
}
stack.push(inOrderList.get(i));
break;
}
}
}
while(!stack.isEmpty()){
result.add(stack.pop());
}
return result;
}
//将字符串中数字和符号分开,传到arraylist中
public static ArrayList<String> getStringList(String str){
ArrayList<String> result = new ArrayList<String>();
String num = "";
for (int i = 0; i < str.length(); i++) {
if(Character.isDigit(str.charAt(i))){
num = num + str.charAt(i);
}else{
if(num != ""){
result.add(num);
}
result.add(str.charAt(i) + "");
num = "";
}
}
if(num != ""){
result.add(num);
}
return result;
}
public static ArrayList<String> getExpress(String s)
{ ArrayList<String> array=new ArrayList<String>();
String num="";
for(int i=0;i<s.length();i++)
{
if(Character.isDigit(s.charAt(i)))
{
num+=s.charAt(i); }
else
{
array.add(num);
num="";
array.add(s.charAt(i)+""); } }
if(num!="")
{
array.add(num);
}
return array; }
public static boolean compare(String peek, String cur){
if("*".equals(peek) && ("/".equals(cur) || "*".equals(cur) ||"+".equals(cur) ||"-".equals(cur))){
return true;
}else if("/".equals(peek) && ("/".equals(cur) || "*".equals(cur) ||"+".equals(cur) ||"-".equals(cur))){
return true;
}else if("+".equals(peek) && ("+".equals(cur) || "-".equals(cur))){
return true;
}else if("-".equals(peek) && ("+".equals(cur) || "-".equals(cur))){
return true;
}
return false;
} //转化成后缀表达式
public static ArrayList<String> getPost(ArrayList<String> s)
{ ArrayList<String> res=new ArrayList<String>();
Stack<String> oper=new Stack<String>();
for(int i=0;i<s.size();i++)
{
if(Character.isDigit(s.get(i).charAt(0)))
{
res.add(s.get(i));
//System.out.println(s.get(i)); }
else
{
//System.out.println(s.get(i));
switch(s.get(i).charAt(0))
{
case '(': oper.push(s.get(i));
//System.out.println("("); break;
case ')':
while(!oper.isEmpty()&&!oper.peek().equals("(") )
{
//System.out.println(oper.peek());
res.add(oper.pop()); }
oper.pop();
break;
default:
//System.out.println(s.get(i));
while(!oper.isEmpty()&&compare(oper.peek(),s.get(i)))
{//System.out.println(oper.peek());
res.add(oper.pop()); }
oper.push(s.get(i)); break; } } }
while (!oper.isEmpty())
{
res.add(oper.pop());
} return res; }
//后缀表达式计算
//遇到数字入栈,符号就取栈内数据,结果放入栈中
public static void calcute(ArrayList<String> post)
{
Stack<Integer> stack=new Stack<Integer>();
for(int i=0;i<post.size();i++)
{
if(Character.isDigit(post.get(i).charAt(0)))
{ stack.push(Integer.parseInt(post.get(i)));
System.out.println(post.get(i)); }
else
{
int back=stack.pop();
int font=stack.pop(); switch(post.get(i).charAt(0))
{ case '+':
res=font+back; break;
case '-':
res=font-back; break;
case '*':
res=font*back; break;
case '/':
res=font/back; break;
default : } stack.push(res);
} } } public static void main(String[] args)
{
String s = "12+(23*3-56+7)*(2+90)/2";
ArrayList<String> a=new ArrayList<String>();
//a=getExpress(s);
a=getStringList(s);
a=getPostOrder(a);
//a=getPost(a);
Iterator< String> iter=a.iterator();
while(iter.hasNext())
{
System.out.print(iter.next()+"--");
} System.out.println(); calcute(a);
System.out.println(res+"最终的结果"); } }

表达式求职JAVA(转)的更多相关文章

  1. Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】

    原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...

  2. Lambda 表达式 in java 8

    Lambda 表达式 in Java 8 Lambda表达式是java 8 新增的特性 Lambda表达式主要作用:支持将代码块作为方法参数,允许使用更简洁的代码创建函数式接口的实例,是匿名内部类的一 ...

  3. Lambda表达式和Java集合框架

    本文github地址 前言 我们先从最熟悉的Java集合框架(Java Collections Framework, JCF)开始说起. 为引入Lambda表达式,Java8新增了java.util. ...

  4. Lambda 表达式,Java中应用Lambda 表达式

    一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...

  5. 华为上机测试题(表达式运算-java)

    PS:自己写的,自测试OK,供大家参考. 补充:数据解析的过程,评论区有更好的处理方式,可参考. /* * 输入一个表达式,3*8+7-2,没有括号 输出结果 */ /* 本程序暂不考虑容错处理 */ ...

  6. Thymeleaf常用语法:模板文件中表达式调用Java类的静态方法

    在模板文件的表达式中,可以使用“${T(全限定类名).方法名(参数)}”这种格式来调用Java类的静态方法. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1. ...

  7. 蓝桥杯 ALGO-156 表达式计算 JAVA代码 栈的应用

     算法训练 表达式计算   时间限制:1.0s   内存限制:256.0MB      问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个 ...

  8. java-servlet-EL表达式和java标签

    1      Servlet线程安全问题 1st.              为什么说servlet会有线程安全问题? 容器默认情况下,对于某个servlet,只会创建一个实例. 容器收到一个请求,就 ...

  9. QuartZ Cron表达式在java定时框架中的应用

    CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表. CronT ...

随机推荐

  1. 模拟请求之 HTTP_Request2

    简单安装: pear install HTTP_Request2 使用例子: <?php require_once 'HTTP/Request2.php'; $request = new HTT ...

  2. 006.Compile方法

    Delphi procedure Compile; 类型:procedure 可见性:public 所在单元:System.RegularExpressionsCore 父类:TPerlRegEx 此 ...

  3. less的使用方法

    LESS学习 1.变量 我们可以把一个css样式的值赋给一个参数,然后再设置样式的时候只需要设置这个参数名,如果要修改,就改参数的值就可以了. demo.html <!DOCTYPE html& ...

  4. Hive 自定义函数(转)

    Hive是一种构建在Hadoop上的数据仓库,Hive把SQL查询转换为一系列在Hadoop集群中运行的MapReduce作业,是MapReduce更高层次的抽象,不用编写具体的MapReduce方法 ...

  5. Mac操作系统常用快捷键

    复制:cmd+c      粘贴:cmd+v      剪切:先cmd+c,再cmd+opt+v 显示桌面:cmd+F3      切换输入法:cmd+space 打开Spotlight:ctrl+s ...

  6. Source Insight 显示中文乱码

    Source Insight 3.X utf8支持插件震撼发布 继上次SI多标签插件之后,因为公司内部编码改为utf8编码,因此特意做了这个Source Insight 3.X utf8插件. 下载地 ...

  7. 6 款国外开源web oa办公系统(转)

    国外的开源产品较多,而且大多提供免费的社区版本,oa办公系统也不例外. 1.eGroupware eGroupware是一个多用户,在以PHP为基础的API上的定制集为基础开发的,以WEB为基础的工作 ...

  8. Elasticsearch强大的聚合功能Facet

    在常规数据库中,我们都知道有一个sql就是group,分组.如果主表只有对应的一个列记录的分组的ID,那么还好统计,比如说每本书book表,有一个分类catId,记录是属于哪一类的书,那么直接按照ca ...

  9. 在asp.net中如何自己编写highcharts图表导出到自己的服务器上来

    1.准备工作:网上下载highcharts导出的关键dll.      1).Svg.dll:因为highcharts的格式其实就是一个xml,采用svg的方式画图:      2).itextsha ...

  10. BZOJ 1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机

    Description 约翰正在制造一台新型的挤奶机,但他不希望别人知道.他希望尽可能久地隐藏这个秘密.他把挤奶机藏在他的农场里,使它不被发现.在挤奶机制造的过程中,他需要去挤奶机所在的地方T(1≤T ...