简易的逆波兰标记法计算器

在所谓的逆波兰标记法中,操作符是在其作用的操作数之后被输入的。
如你如果想要计算8*4+6/3则需要按以下步骤输入:
8 enter 4 * 6 enter 3 / +
思路还是利用栈来保存数据以此来方便计算。
下面直接给出代码:

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


public class RPNCalculator {
	public void run() {
		Scanner sysin=new Scanner(System.in);
		System.out.println("RPN型计算器,按下H显示帮助信息");
		Stack<Double> operandStack=new Stack<Double>();
		while(true) {
			System.out.println("请输入:");
			String line=sysin.nextLine();
			char ch=Character.toUpperCase(line.charAt(0));
			if(ch=='Q') {
				break;
			}else if(ch=='C') {
				operandStack.clear();
			}else if(ch=='H') {
				helpCommand();
			}else if(Character.isDigit(ch)) {
				operandStack.push(Double.parseDouble(line));
			}else if(ch=='+'||ch=='-'||ch=='*'||ch=='/') {
				applyOperator(ch,operandStack);
			}else {
				System.out.println("无法识别的指令"+ch);
			}
		}
		sysin.close();
	}

	private void applyOperator(char op, Stack<Double> operandStack) {
		double result;
		double rhs=operandStack.pop();
		double lhs=operandStack.pop();
		switch (op) {
		case '+':
			result=lhs+rhs;
			break;
		case '-':
			result=lhs-rhs;
			break;
		case '*':
			result=lhs*rhs;
			break;
		case '/':
			result=lhs/rhs;
			break;
		default:
			throw new RuntimeException("无法识别的操作符"+op);
		}
		System.out.println(String.format("%.5f", result));
		operandStack.push(result);
	}

	private void helpCommand() {
		System.out.println("这是一个简易计算器,以逆波兰标记法输入表达式为核心的计算器。");
		System.out.println("其中,运算符在其应用的操作数之后。每行由一个数字、一个操作符或以下命令组成");
		System.out.println("Q----------退出计算器程序");
		System.out.println("H----------再次显示帮助信息");
		System.out.println("C----------清空计算器的栈程");
		
	}
	
	public static void main(String[] args) {
		new RPNCalculator().run();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值