MyDC总结
需要补全的代码如下
public int evaluate(String expr) {
int op1, op2, result = 0;
String token;
StringTokenizer tokenizer = new StringTokenizer(expr);
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
//如果是运算符,调用isOperator
if () {
//从栈中弹出操作数2
//从栈中弹出操作数1
//根据运算符和两个操作数调用evalSingleOp计算result;
//计算result入栈;
} else//如果是操作数
//操作数入栈;
}
return result;
}
思路
如果是运算符,调用
isOperator
这是isOperator
:
private boolean isOperator(String token) {
return (token.equals("+") || token.equals("-") ||
token.equals("*") || token.equals("/"));
}
这个函数boolean
型,参数可以直接传字符串,所以在if()
中填入 isOperator(token)
即可。
从栈中弹出操作数2
弹栈使用stack.pop()
,所以填入op2 = stackpop()
。
从栈中弹出操作数1
方法同上。
根据运算符和两个操作数调用
evalSingleOp
计算result
首先看下evalSingleOp
以确定传入的参数
private int evalSingleOp(char operation, int op1, int op2)
那么,由上可以看出,需要传入char型运算符、int型操作数1、int型操作数2。operation
就是运算符,需要传token
,但是token
是字符串,所以使用string.charAt(0)
,把token
转换成token.charAt(0)
。至于op1、op2本身就是int型。
综上得出,需要填入
result=evalSingleOp(token.charAt(0), op1, op2);
计算
result
入栈
stack.push(result);
如果是操作数,操作数入栈
这里只能让int型入栈,但是输入的token
是字符串,所以必须要使用Integer.parseInt(string)
转化成int型。
故填入
stack.push(Integer.parseInt(token));
完整代码
[git链接](
需要补全的代码如下
public int evaluate(String expr) {
int op1, op2, result = 0;
String token;
StringTokenizer tokenizer = new StringTokenizer(expr);
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
//如果是运算符,调用isOperator
if () {
//从栈中弹出操作数2
//从栈中弹出操作数1
//根据运算符和两个操作数调用evalSingleOp计算result;
//计算result入栈;
} else//如果是操作数
//操作数入栈;
}
return result;
}
思路
如果是运算符,调用
isOperator
这是isOperator
:
private boolean isOperator(String token) {
return (token.equals("+") || token.equals("-") ||
token.equals("*") || token.equals("/"));
}
这个函数boolean
型,参数可以直接传字符串,所以在if()
中填入 isOperator(token)
即可。
从栈中弹出操作数2
弹栈使用stack.pop()
,所以填入op2 = stackpop()
。
从栈中弹出操作数1
方法同上。
根据运算符和两个操作数调用
evalSingleOp
计算result
首先看下evalSingleOp
以确定传入的参数
private int evalSingleOp(char operation, int op1, int op2)
那么,由上可以看出,需要传入char型运算符、int型操作数1、int型操作数2。operation
就是运算符,需要传token
,但是token
是字符串,所以使用string.charAt(0)
,把token
转换成token.charAt(0)
。至于op1、op2本身就是int型。
综上得出,需要填入
result=evalSingleOp(token.charAt(0), op1, op2);
计算
result
入栈
stack.push(result);
如果是操作数,操作数入栈
这里只能让int型入栈,但是输入的token
是字符串,所以必须要使用Integer.parseInt(string)
转化成int型。
故填入
stack.push(Integer.parseInt(token));
完整代码
git链接
MyDC
/**
* Created by radish608 on 17-5-3.
*/
import java.util.StringTokenizer;
import java.util.Stack;
public class MyDC {
/**
* constant for addition symbol
*/
private final char ADD = '+';
/**
* constant for subtraction symbol
*/
private final char SUBTRACT = '-';
/**
* constant for multiplication symbol
*/
private final char MULTIPLY = '*';
/**
* constant for division symbol
*/
private final char DIVIDE = '/';
/**
* the stack
*/
private Stack<Integer> stack;
public MyDC() {
stack = new Stack<Integer>();
}
public int evaluate(String expr) {
int op1, op2, result = 0;
String token;
StringTokenizer tokenizer = new StringTokenizer(expr);
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
//如果是运算符,调用isOperator
if (isOperator(token)) {
//从栈中弹出操作数2
op2 = stack.pop();
//从栈中弹出操作数1
op1 = stack.pop();
//根据运算符和两个操作数调用evalSingleOp计算result;
result=evalSingleOp(token.charAt(0), op1, op2);
//计算result入栈;
stack.push(result);
} else//如果是操作数
//操作数入栈;
stack.push(Integer.parseInt(token));
}
return result;
}
private boolean isOperator(String token) {
return (token.equals("+") || token.equals("-") ||
token.equals("*") || token.equals("/"));
}
private int evalSingleOp(char operation, int op1, int op2) {
int result = 0;
switch (operation) {
case ADD:
result = op1 + op2;
break;
case SUBTRACT:
result = op1 - op2;
break;
case MULTIPLY:
result = op1 * op2;
break;
case DIVIDE:
result = op1 / op2;
}
return result;
}
}
MyDCTester
/**
* Created by radish608 on 17-5-3.
*/
import java.util.Scanner;
public class MyDCTester {
public static void main(String[] args) {
String expression, again;
int result;
try {
Scanner in = new Scanner(System.in);
do {
MyDC evaluator = new MyDC();
System.out.println("Enter a valid postfix expression: ");
expression = in.nextLine();
result = evaluator.evaluate(expression);
System.out.println();
System.out.println("That expression equals " + result);
System.out.print("Evaluate another expression [Y/N]? ");
again = in.nextLine();
System.out.println();
}
while (again.equalsIgnoreCase("y"));
} catch (Exception IOException) {
System.out.println("Input exception reported");
}
}
}
运行结果
- 用例:
1 2 + 8 2 - 7 4 - / *
- 截图:
)
MyDC
/**
* Created by radish608 on 17-5-3.
*/
import java.util.StringTokenizer;
import java.util.Stack;
public class MyDC {
/**
* constant for addition symbol
*/
private final char ADD = '+';
/**
* constant for subtraction symbol
*/
private final char SUBTRACT = '-';
/**
* constant for multiplication symbol
*/
private final char MULTIPLY = '*';
/**
* constant for division symbol
*/
private final char DIVIDE = '/';
/**
* the stack
*/
private Stack<Integer> stack;
public MyDC() {
stack = new Stack<Integer>();
}
public int evaluate(String expr) {
int op1, op2, result = 0;
String token;
StringTokenizer tokenizer = new StringTokenizer(expr);
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
//如果是运算符,调用isOperator
if (isOperator(token)) {
//从栈中弹出操作数2
op2 = stack.pop();
//从栈中弹出操作数1
op1 = stack.pop();
//根据运算符和两个操作数调用evalSingleOp计算result;
result=evalSingleOp(token.charAt(0), op1, op2);
//计算result入栈;
stack.push(result);
} else//如果是操作数
//操作数入栈;
stack.push(Integer.parseInt(token));
}
return result;
}
private boolean isOperator(String token) {
return (token.equals("+") || token.equals("-") ||
token.equals("*") || token.equals("/"));
}
private int evalSingleOp(char operation, int op1, int op2) {
int result = 0;
switch (operation) {
case ADD:
result = op1 + op2;
break;
case SUBTRACT:
result = op1 - op2;
break;
case MULTIPLY:
result = op1 * op2;
break;
case DIVIDE:
result = op1 / op2;
}
return result;
}
}
MyDCTester
/**
* Created by radish608 on 17-5-3.
*/
import java.util.Scanner;
public class MyDCTester {
public static void main(String[] args) {
String expression, again;
int result;
try {
Scanner in = new Scanner(System.in);
do {
MyDC evaluator = new MyDC();
System.out.println("Enter a valid postfix expression: ");
expression = in.nextLine();
result = evaluator.evaluate(expression);
System.out.println();
System.out.println("That expression equals " + result);
System.out.print("Evaluate another expression [Y/N]? ");
again = in.nextLine();
System.out.println();
}
while (again.equalsIgnoreCase("y"));
} catch (Exception IOException) {
System.out.println("Input exception reported");
}
}
}
运行结果
- 用例:
1 2 + 8 2 - 7 4 - / *
- 截图:
MyDC总结的更多相关文章
- 20145234黄斐《Java程序设计》MyDC
http://git.oschina.net/jiataiji/java
- NPOI Helper文档
public class ExcelHelper { /// <summary> /// NPOI Excel转DataTable /// </summary> /// < ...
- C# csv 操作类
using System.Data; using System.IO; using System.Text; namespace YanZhiwei.DotNet2.Utilities.Common ...
- python内建函数-数字相关
本篇对于数字有关的内置函数进行总结. 数字包括 int() , long() , float() , complex() ,这些函数都能够用来进行数值类型的转换.同时这些函数也接受字符串参数,返回字符 ...
- wxWidgets学习笔记——在屏幕上画简单的图形和文字
在屏幕上画简单图形和显示图片.处理简单鼠标键盘事件 /*************************************************************** * Name: M ...
- Installing vSphere SDK for Perl
Installing vSphere SDK for Perl 你可以安装vSphere SDK 在Linux 或者Microsoft Windows 系统,或者 部署 VSphere Managem ...
- C#读取csv格式文件
方法1:用一个System.Web.UI.HtmlControls.HtmlInputFile去handle文件选取 以下是button click event中的code,用来执行当文件选取了之后读 ...
- c# 柱状图(转载)
// c# 显示柱状图 using System; using System.Data; using System.Configuration; using System.Web; using Sys ...
- 2016-2017-2 《Java 程序设计》课堂实践项目
目录 基本工具 基础内容 Hello World 和 模块分解 数组的使用 命令行参数 递归 分支语句 String类的使用 类的定义与测试 多态 IO与异常 数据库 网络与安全 数据结构应用 And ...
随机推荐
- MySQL提权之user.MYD中hash破解方法
经常在服务器提权的时候,尤其是windows环境下,我们发现权限不高,却可以读取mysql的datadir目录,并且能够成功下载user.MYD这个文件.但是在读取内容的时候,经常会遇到root密码h ...
- 环信REST API python SDK
今天鼓起勇气,决定把这个贡献出来.不敢误人子弟,也一直担心,在不良质量的产品会祸害人,但自己已经使用,它本身也没技术. 平庸的代码,高效地实用,为环信贡献点力,如有问题,欢迎斧正,一起学习,一起成长, ...
- Mac原生Terminal快速登录ssh
1. 创建rsa key 在终端中输入以下命令: ssh-keygen -t rsa 完成之后可以在~/.ssh目录下找到公钥和私钥 如果你与我一样有使用gitlab,那么这个秘钥应该已经存在 ...
- 记录c++本地文件读取组装
class ErrorCodeConfig{ public: ErrorCodeConfig(){} ErrorCodeConfig(const ErrorCodeConfig&)=delet ...
- JavaScript权威指南第01章 JavaScript 概述
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangbin10025/article/details/27951767 JavaScript 概 ...
- css注入获取网页中的数据
<style><?php echo htmlspecialchars($_GET['x']);?></style> <br><br>< ...
- C++ —— 小操作
判断一个浮点数是否是整数: #include <iostream> using namespace std; int main() { ); if (l == (int)l) { //.. ...
- Hadoop学习笔记---HDFS
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐 ...
- 到底什么是dp思想(内含大量经典例题,附带详细解析)
期末了,通过写博客的方式复习一下dp,把自己理解的dp思想通过样例全部说出来 说说我所理解的dp思想 dp一般用于解决多阶段决策问题,即每个阶段都要做一个决策,全部的决策是一个决策序列,要你求一个 最 ...
- 理解numpy exp函数
exp,高等数学里以自然常数e为底的指数函数 Exp:返回e的n次方,e是一个常数为2.71828 Exp 函数 返回 e(自然对数的底)的幂次方. a = 1 print np.exp(a) a ...