下面将练习大量的树操作
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. 前端资源多个产品整站一键打包&包版本管理(三)—— gulp分流

    问题: 当我们一个工作台里面有好几个项目的时候,我们要为项目的前端资源进行打包,但是,gulpfile只有一个,如果我们把所有的打包都放在同一个文件里面,首先文件会越来越大,而且不便于管理,这时,我们 ...

  2. php中的require() 语句的使用方法

    php中的require() 语句的使用方法 require()语句包括并运行指定文件. require()语句包括并运行指定文件.有关包括如何工作的详细信息见 include() 的文档. requ ...

  3. li样式不显示使用overflow:hidden导致Li前面点、圈等样式不见

    点评:用了overflow:hidden 会影响 list-style,即当ul 中的li 的overflow 为hidden的时候,list-style不起作用,不显示前面的点.圈等样式,在ul或l ...

  4. Oracle数据库插入图片和读取图片

    package com.basicSql.scroll_page; import java.io.File; import java.io.FileInputStream; import java.i ...

  5. PL/SQL — 存储过程

    存储过程子程序的一种类型,能够完成一些任务,作为schema对象存储于数据库.是一个有名字的PL/SQL代码块,支持接收或不接受参数,同时也支持参数输出.一个存储过程通常包含定于部分,执行部分,Exc ...

  6. SLua

    安装 1.下载最新版,将Assets目录里的所有内容复制到工程中,对于最终产品,可以删除例子,文档等内容,如果是开发阶段则无所谓. 2.等待unity编译完毕,如果一切顺利的话,将出现SLua菜单,点 ...

  7. tomcat+apache 实现负载均衡之一:同一台电脑部署2个以上tomcat

    1.  下载tomcat 8.0.17 http://apache.fayea.com/tomcat/tomcat-8/v8.0.17/bin/apache-tomcat-8.0.17.tar.gz ...

  8. int([x[, base]]) : 将一个字符转换为int类型,base表示进制

    int([x[, base]]) : 将一个字符转换为int类型,base表示进制 >>> int(-12) -12 >>> int(-12.00) -12 > ...

  9. POj 2186 Popular Cows[连通分量]

    题目大意:给出N头牛,有M种关系u, v.代表u牛崇拜v牛.要求找出有多少头牛被所有牛崇拜着题目链接:http://poj.org/problem?id=2186解题思路:1>求出强连通分量,标 ...

  10. PHP漏洞全解(四)-xss跨站脚本攻击

    本文主要介绍针对PHP网站的xss跨站脚本攻击.跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息 的方式诱使管理员浏览,从而获得管理员权限,控制整个网站 ...