• 大小: 3KB
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: Java
  • 标签:

资源简介

java代码实现中缀表达式转后缀表达式,并计算结果

资源截图

代码片段和文件信息

package com.mrwang.calculator;

import java.util.Iterator;
import java.util.Scanner;
import java.util.Stack;

public class Calculator {
//定义操作符常量
private final static char ADD = ‘+‘;
private final static char SUBTRACT = ‘-‘;
private final static char MULTIPLY = ‘*‘;
private final static char DIVIDE = ‘/‘;
public static void main(String[] args) {
// 获取输入的值  
// “3+(1*2)-(5+2)“
Scanner in = new Scanner(System.in);
System.out.println(“请输入一个数学表达式:“);
String expression = in.nextLine();
String postfix = Calculator.infixToPostfix(expression);
System.out.println(postfix);
System.out.println(Calculator.calculator(postfix));
}

/**
 * 该方法用来将中缀表达式(数学表达式)转为后缀表达式(逆波兰表达式)
 * Infix to Postfix 
 * http://blog.fishc.com/2093.html/2#prettyPhoto 中缀表达式转后缀表达式
 * http://blog.tpircsboy.com/acm/poj-1686/  后缀表达式求值
 * http://www.aijava.cn/13197.html
 * @param infixPression
 * @return
 */
public static String infixToPostfix(String infixexpression){
Stack S1 = new Stack();// 运算符栈
Stack S2 = new Stack();// 表达式栈
int len = infixexpression.length(); // 中缀表达式的长度
int index = 0;
while(index < len){ // 循环取出中缀表达式中的字符
char c = infixexpression.charAt(index);
switch(c){
case ‘(‘:
S1.push(c);
break;
case ‘)‘:
while(S1.peek() != ‘(‘) {
S2.push(S1.pop());
}
S1.pop();
break;
case ADD:
case SUBTRACT:
while(!S1.empty() && S1.peek() != ‘(‘) {
S2.push(S1.pop());
}
S1.push(c);
break;
case MULTIPLY:
case DIVIDE:
w

评论

共有 条评论