`
jxuin
  • 浏览: 30028 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java 四则运算 栈的实现

阅读更多

上次偶尔看到一个面试题是四则运算,了解了一下算法用java实现,如下

package test;

import java.util.*;

public class Szys {
    public static void main(String[] args) {
        Szys szys = new Szys();
        szys.szysTest();
    }

    public void szysTest() {
        System.out.println("输入表达式:");
        Scanner sc = new Scanner(System.in);
        String str1 = sc.nextLine();
        str1 = str1 + "@";
        StringBuilder sb = new StringBuilder();
        MyStack opstack = new MyStack();
        opstack.push('@');
        int len = str1.length();
        char ch;
        char ch1;
        char ch2;
        //中缀表达式转化为后缀表达式
        for (int i = 0; i < len; i++) {
            ch = str1.charAt(i);
            if (isOperator(ch)) {
                ch1 = (Character) opstack.peek();
                if (ch == ')') {
                    ch2 = (Character) opstack.pop();
                    while (ch2 != '(') {
                        sb.append(' ');
                        sb.append(ch2);
                        ch2 = (Character) opstack.pop();
                    }
                } else if (ch == '(') {
                    opstack.push(ch);
                } else if (ch == '@') {
                    ch2 = (Character) opstack.pop();
                    while (ch2 != '@') {
                        sb.append(' ');
                        sb.append(ch2);
                        ch2 = (Character) opstack.pop();
                    }
                } else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {
                    while (priority(ch1) >= priority(ch)) {
                        sb.append(' ');
                        sb.append(ch1);
                        opstack.pop();
                        ch1 = (Character) opstack.peek();
                    }
                    opstack.push(ch);
                }
            } else {
                sb.append(' ');
                sb.append(ch);
            }
        }
        System.out.println(sb.toString());
        operation(sb.toString());
    }

    //设置符号优先级
    public int priority(char operator) {
        int i = 0;
        if ('+' == operator || '-' == operator) {
            i = 1;
        } else if ('*' == operator || '/' == operator) {
            i = 2;
        } else if ('@' == operator || '(' == operator) {
            i = 0;
        }
        return i;
    }

    public boolean isOperator(char operator) {
        boolean flag = false;
        if ('+' == operator || '-' == operator || '*' == operator
                || '/' == operator || '(' == operator || ')' == operator || '@' == operator) {
            flag = true;
        }
        return flag;
    }
    
    //用于运算,一个运算符运算完将结果放入栈中
    public void operation(String tmpStr){
        MyStack tmpStack = new MyStack();
        String[] tmpStrArr = tmpStr.split(" ");
        String tmpStr1 = "",tmpStr2 = "",tmpStr3 = "";
        float tmpFloat = 0,tmpFloat1 = 0,tmpFloat2 = 0;
        for(String str:tmpStrArr){
            if("+".equals(str)||"-".equals(str)||"*".equals(str)||"/".equals(str)){
                tmpStr1 = (String)tmpStack.pop();
                tmpStr2 = (String)tmpStack.pop();
                tmpFloat1 = Float.parseFloat(tmpStr1);
                tmpFloat2 = Float.parseFloat(tmpStr2);
                if("+".equals(str)){
                    tmpFloat = tmpFloat2 + tmpFloat1;
                }else if("-".equals(str)){
                    tmpFloat = tmpFloat2 - tmpFloat1;
                }else if("*".equals(str)){
                    tmpFloat = tmpFloat2 * tmpFloat1;
                }else if("/".equals(str)){
                    tmpFloat = tmpFloat2 / tmpFloat1;
                }
                tmpStr3 = String.valueOf(tmpFloat);
                tmpStack.push(tmpStr3);
            }else{
                tmpStack.push(str);
            }
        }
        System.out.println(tmpStack.peek());
    }
}

 

栈的实现,网上很多

package test;

import java.util.LinkedList;
//LinkedList实现栈
public class MyStack {
    private LinkedList<Object> ll = new LinkedList<Object>();
   
    public void push(Object o){
        ll.addFirst(o);
    }
   
    public Object pop(){
        return ll.removeFirst();
    }
   
    public Object peek(){
        return ll.getFirst();
    }
   
    public boolean empty(){
        return ll.isEmpty();
    }
   
    public void show(){
        for(int i=ll.size()-1;i>=0;i--){
            System.out.print(ll.get(i));
        }
        System.out.println();
    }
}

0
0
分享到:
评论

相关推荐

    j# java计算器 四则运算 栈

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

    java实现四则运算

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

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

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

    简单的JAVA四则运算

    #### 一、Java四则运算基础 在计算机编程中,四则运算是最基本的数学运算之一,主要包括加法(`+`)、减法(`-`)、乘法(`*`)与除法(`/`)。对于Java这样的面向对象语言而言,实现四则运算不仅涉及到基本的数据类型操作,...

    java 四则运算计算器

    ### Java四则运算计算器知识点详解 #### 一、项目概述 **标题与描述解析:**“Java四则运算计算器”是一款基于Java语言开发的计算器应用,能够执行加、减、乘、除等基本算术运算,并支持混合运算,具备友好的用户...

    栈的四则运算测试代码

    栈是一种常见的数据结构,它遵循“后进先出”(LIFO)的原则,常用于处理一系列操作,如四则运算。在计算机科学中,栈在算法实现、编译器设计和许多其他领域都有广泛的应用。四则运算,即加法、减法、乘法和除法,是...

    用栈实现数字的四则运算

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

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

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

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

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

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

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

    四则运算JAVA计算器

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

    java实现字符串四则运算公式解析工具类的方法

    "java实现字符串四则运算公式解析工具类的方法" 今天小编将为大家分享java实现字符串四则运算公式解析工具类的方法,这个工具类能够帮助用户快速解析和计算字符串形式的四则运算公式。这个工具类被命名为...

    运用栈实现四则运算2

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

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

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

    java编写计算器,可用于二十位以上整数的四则运算

    在Java编程语言中,开发一个可以处理二十位以上整数的四则运算计算器是一项具有挑战性的任务,因为标准的`int`和`long`数据类型无法存储这么大的数值。为了解决这个问题,我们需要使用`BigInteger`类,它属于Java的...

    四则运算表达式计算器

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

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

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

    四则运算代码

    java写的一个四则运算方式,使用栈实现,支持+-×/()^等操作,非常容易扩展其他操作符。只需在表格中添加并在switch中增加case语句就可以。 代码比较容易修改为C++的代码。

Global site tag (gtag.js) - Google Analytics