`
jocks
  • 浏览: 6803 次
文章分类
社区版块
存档分类
最新评论

java利用栈实现四则运算

 
阅读更多

1,代码第一部,处理输入的计算式

2,代码第二部分,中缀表达式转化为后缀表达式

3,代码第三部分,计算后缀表达式,并返回运算结果

有两个类,一个是主要的实现类LT.java 另一个是测试类Test.java


1,LT.java

package cal;
import java.util.*;
public class LT {

	public char[] op = {'+','-','*','/','(',')'};
	public String[] strOp = {"+","-","*","/","(",")"};
	public boolean isDigit(char c){
		if(c>='0'&&c<='9'){
			return true;
		}
		return false;
	}
	public boolean isOp(char c){
		for(int i=0;i<op.length;i++){
			if(op[i]==c){
				return true;
			}
		}
		return false;
	}
	public boolean isOp(String s){
		for(int i=0;i<strOp.length;i++){
			if(strOp[i].equals(s)){
				return true;
			}
		}
		return false;
	}
	/**
	 * 处理输入的计算式
	 * @param str
	 * @return
	 */
	public List<String> work(String str){
		List<String> list = new ArrayList<String>();
		char c;
		StringBuilder sb = new StringBuilder();
		for(int i=0;i<str.length();i++){
			c = str.charAt(i);
			if(isDigit(c)){
				sb.append(c);
				
			}
			if(isOp(c)){
				if(sb.toString().length()>0){
					list.add(sb.toString());
					sb.delete(0, sb.toString().length());
				}
				list.add(c+"");
			}
		}
		if(sb.toString().length()>0){
			list.add(sb.toString());
			sb.delete(0, sb.toString().length());
		}
		return list;
	}
	public void printList(List<String> list){
		for(String o:list){
			System.out.print(o+" ");
		}
	}
	/**
	 * 中缀表达式转化为后缀表达式
	 * 1,遇到数字输出
	 * 2,遇到高优先级的全部出栈
	 * 3,最后全部出栈
	 */
	public List<String> InfixToPostfix(List<String> list){
		List<String> Postfixlist = new ArrayList<String>();//存放后缀表达式
		Stack<String> stack = new Stack<String>();//暂存操作符
		//stack.push('#');
		for(int i=0;i<list.size();i++){
			
			String s = list.get(i);
			if(s.equals("(")){
				stack.push(s);
			}else if(s.equals("*")||s.equals("/")){
				stack.push(s);
			}else if(s.equals("+")||s.equals("-")){
				if(!stack.empty()){
					while(!(stack.peek().equals("("))){
						Postfixlist.add(stack.pop());
						if(stack.empty()){
							break;
						}
					}
					stack.push(s);
				}else{
					stack.push(s);
				}
			}else if(s.equals(")")){
				while(!(stack.peek().equals("("))){
					Postfixlist.add(stack.pop());
				}
				stack.pop();
			}else{
				Postfixlist.add(s);
			}
			if(i==list.size()-1){
				while(!stack.empty()){
					Postfixlist.add(stack.pop());
				}
			}
		}
		return Postfixlist;
	}
	/**
	 * 后缀表达式计算
	 */
	public int doCal(List<String> list){
		Stack<Integer> stack = new Stack<Integer>();
		for(int i=0;i<list.size();i++){
			String s = list.get(i);
			int t=0;
			if(!isOp(s)){
			    t = Integer.parseInt(s);
				stack.push(t);
			}else{
				if(s.equals("+")){
					int a1 = stack.pop();
					int a2 = stack.pop();
					int v = a2+a1;
					stack.push(v);
				}else if(s.equals("-")){
					int a1 = stack.pop();
					int a2 = stack.pop();
					int v = a2-a1;
					stack.push(v);
				}else if(s.equals("*")){
					int a1 = stack.pop();
					int a2 = stack.pop();
					int v = a2*a1;
					stack.push(v);
				}else if(s.equals("/")){
					int a1 = stack.pop();
					int a2 = stack.pop();
					int v = a2/a1;
					stack.push(v);
				}
			}
		}
		return stack.pop();
	}
}

2,测试类Test.java

package cal;

import java.util.*;

public class Test {

	public static void main(String[] args) {
		LT lt = new LT();
		String str = "9+(3-1)*3+10/2";
		List<String> list = lt.work(str);
		List<String> list2 = lt.InfixToPostfix(list);
		System.out.println("原式为:"+str);
		System.out.print("后缀表达式为:");
		lt.printList(list2);
		System.out.println(" ");
		System.out.println("计算结果为:"+lt.doCal(list2));
		
		
		
	}

}


3,输出结果

原式为:9+(3-1)*3+10/2
后缀表达式为:9 3 1 - 3 * + 10 2 / +
计算结果为:20


分享到:
评论

相关推荐

    java简易计算器(四则运算、三角函数、实现优先级)

    Java简易计算器是一个基于Java编程语言实现的计算工具,它不仅支持基本的四则运算,还具备处理三角函数的能力,并且已经实现了运算的优先级规则。这个项目的核心是将用户输入的中缀表达式(常见的数学表达式形式)...

    j# java计算器 四则运算 栈

    【标题】"j# java计算器 四则运算 栈"所涉及的知识点主要集中在编程语言J#、计算器软件开发以及数据结构中的栈。这个项目是一个简单的计算器程序,它使用了J#这一微软推出的.NET框架下的Java方言来实现,同时具备...

    栈的四则运算测试代码

    四则运算,即加法、减法、乘法和除法,是基本的算术运算,它们可以被有效地用栈来处理。 当我们谈论使用栈进行四则运算时,通常涉及以下几个关键步骤: 1. **表达式解析**:首先,我们需要将输入的数学表达式(如 ...

    java实现四则运算

    在本主题中,我们将深入探讨如何使用Java实现四则运算,包括中缀表达式到后缀表达式的转换以及利用栈数据结构进行计算。 首先,我们要理解四则运算的基本概念,它们包括加法(+)、减法(-)、乘法(*)和除法(/)...

    Java利用堆栈实现简单四则运算

    本文将详细介绍如何利用Java的堆栈数据结构来实现简单的四则运算。 四则运算,即加法(+)、减法(-)、乘法(*)和除法(/),是我们日常计算中最基本的操作。在计算机程序中,这些运算通常用于处理数学表达式。...

    运用栈实现四则运算2

    在本主题“运用栈实现四则运算2”中,我们将深入探讨如何使用顺序栈来解决数学表达式的计算问题。顺序栈是栈的一种实现方式,其中元素存储在连续的内存空间中,便于快速访问。 首先,我们来看看四个关键的栈操作: ...

    用栈实现数字的四则运算

    例如,`四则运算 (2).c`可能就是一个C语言版本的实现,其中包含解析表达式、处理运算符优先级和栈操作的函数。 总的来说,通过巧妙地运用栈的数据结构,我们可以有效地解决四则运算的问题,尤其是对于复杂表达式的...

    简单的JAVA四则运算

    对于Java这样的面向对象语言而言,实现四则运算不仅涉及到基本的数据类型操作,还需要考虑到运算顺序以及异常处理等问题。 #### 二、Java程序结构与流程 根据提供的部分代码,可以了解到这是一个用于接收用户输入并...

    四则运算JAVA计算器

    该项目是一个基于Java Swing的简单计算器应用程序,能够实现基本的四则运算功能,并且支持括号操作,以解决优先级问题。为了处理复杂的数学表达式,该计算器还引入了栈的概念。 #### 二、项目结构与组件分析 1. **...

    java控制台四则运算计算程序源码

    Java控制台四则运算计算程序源码是一种基于Java编程语言实现的简单计算器,它能够处理任意长度的符合四则运算规则的数学表达式。在控制台上进行交互式操作,用户可以输入数学公式,程序会进行解析并计算出结果。这个...

    四则运算解析器(字符串)

    在实现四则运算解析器时,可以采用递归下降解析(Recursive Descent Parsing)或者堆栈解析(Shunting Yard Algorithm,也称逆波兰表示法)等方法。递归下降解析器直接使用函数来表示文法规则,适合处理简单的表达式...

    Java实现四则混合运算代码示例

    2. 使用自然四则运算表达式,可以简化代码的实现。 3. 使用多种数据结构,可以实现四则混合运算的逻辑。 4. 使用面向对象的编程思想,可以提高代码的可读性和可维护性。 Java实现四则混合运算代码示例的缺点: 1. ...

    Java实现四则运算表达式.doc

    Java实现四则运算表达式 Java中四则运算表达式的实现是计算机科学中一个重要的领域。四则运算表达式是指包含加、减、乘、除四种基本运算符的数学表达式。这些表达式可以用不同的记法来表示,包括中缀记法、前缀记法...

    基于SLR文法的整数加减乘除四则运算

    在这个“基于SLR文法的整数加减乘除四则运算”项目中,我们主要关注的是如何用SLR方法解析和执行基本的算术表达式,即整数之间的加、减、乘、除操作。这通常涉及到以下步骤: 1. **文法定义**:首先,我们需要定义...

    java编写一个类,该类可以进行加、减、乘、除四则运算,并且输出运算结果

    (1)编写一个类,该类可以进行加、减、乘、除四则运算,并且可以输出运算结果。此外,对于除法,如果被除数为0,该类可以报错。对于加、减、乘、除之外的运算符,该类应该告知无法处理。 (2)编写一个包含主方法...

    算术四则运算

    一个利用栈实现四则运算的小资源,操作数只能是个位数

    四则运算表达式计算器

    四则运算表达式计算器可以用多种编程语言实现,如Python、Java、C++、JavaScript等,每种语言都有其特有的数据结构和语法来支持这种计算。 通过以上步骤,我们可以创建一个能够处理任意长度四则运算表达式的计算器...

    用Android studio写的一个四则运算计算器源码以及开发说明

    在本项目中,我们探讨的是一个使用Android Studio开发的四则运算计算器应用。这个应用程序专为Android智能手机设计,能够处理包含加法、减法、乘法和除法四种基本运算的数学表达式,并准确地计算出结果。让我们深入...

    加减乘除四则混合运算计算器-java

    4. 数据结构:栈的使用及其在解决四则运算问题中的角色。 5. 错误处理:学习如何使用try-catch块捕获和处理异常。 6. 算法设计:后缀表达式或逆波兰表示法在四则运算中的应用。 通过完成这个项目,你不仅可以掌握...

Global site tag (gtag.js) - Google Analytics