标签:老师 第一个 自己的 tokenizer rac 多少 tac question 后缀表达式
这个时候我想到上周学习到的继承,既然每一个方法必不可少的就是运算符和操作数,那么为何不创建一个父类,在父类中就写好这些,于是我们就选择了第二个方法。
这是现阶段的一些关键代码
public class Expressions2 extends Issue { String num;// protected String Expression;// String mount; String ope;
//我现在需要一个随机数,来表示题目等级,然后随机确定题目的等级
public String getStage()
{
num = getRandomNumber();
Expression = num +" ";
Random stsge = new Random();
int a = stsge.nextInt(4);
for (int b =0 ;b <= a;b++)
{
ope = getOperator();
Expression += ope + " ";
num = getRandomNumber();
Expression += num + " ";
}
return Expression;
}
}
2.中缀表达式转化为后缀表达式表达式,并计算出结果。
栈是在为解决这个问题的过程中学到的新知识。
列表、对列和堆栈都是线性数据结构。堆找 stack类似于队列,差别在于堆栈元素在堆栈的同一端进入和移出堆栈,最后
一个进入栈堆的元素,是第一个移出堆栈的元素,就像放在橱柜中的一叠盘子或堆在谷仓中的一垛干草。堆栈是一种以后进先出方式管理数据的线性数据结构。
按照老师讲解的栈的原理,我整理了一下将中缀表达式变成后缀表达式的思路,举个例子:
9+(3-1)3+6/2,转换为后缀表达式
1、遇到9 输出9,此时屏幕显示9,栈为空
2、遇到+号,此时栈空,直接入栈,此时屏幕显示9,栈元素只有一个+号
3、遇到左括号,直接入栈,此时屏幕显示9,栈元素为 + (
4、遇到3,输出3,此时屏幕显示9 3,栈元素为+ (
5、遇到-号,栈顶元素为(,入栈,此时屏幕显示9 3,栈元素为+ ( -
6、遇到1,输出1,此时屏幕显示9 3 1,栈元素为+ ( -
7、遇到),持续出栈,直到栈顶为(,并将(出栈但不输出,且)不入栈。此时屏幕显示9 3 1 -,栈元素为+
8、遇到,此时栈顶元素为+,优先级大于栈顶元素,入栈,此时,屏幕显示9 3 1 -,栈元素为+
9、遇到3,输出3,此时屏幕显示9 3 1 - 3,栈元素为+
10、遇到+,此时栈顶元素为,优先级大于等于+,出栈并输出,之后栈顶元素为+,优先级依然大于等于+,出栈并输出,此时栈空,+入栈,
此时屏幕显示9 3 1 - 3 +,栈元素为+
11、遇到6,输出6.此时屏幕显示9 3 1 - 3 * + 6,栈元素为+
12、遇到/,优先级大于栈顶元素,入栈,此时屏幕显示9 3 1 - 3 * + 6,栈元素为+ /
13、遇到2,输出2,此时屏幕显示9 3 1 - 3 * + 6 2
14、此时所有输入读取完毕,将栈中元素依次出栈至空,最后,屏幕显示9 3 1 - 3 * + 6 2 / +
现阶段代码(可能还有一些瑕疵,后续还会继续修改)
public class Transvertor {
private int num1, num2, value1, value2, number;
private Stack stack1 = new Stack();
private String result1;
private int[][] array = {{0, 0, 0, 0, 0},
{0, 1, 1, -1, -1},
{0, 1, 1, -1, -1},
{0, 1, 1, 1, 1},
{0, 1, 1, 1, 1}};
public Transvertor() {
num1 = 0;
num2 = 0;
value1 = 0;
value2 = 0;
result1=" ";
}
public String getAnswer(String Expression) {
StringTokenizer st = new StringTokenizer(Expression);
while (st.hasMoreTokens()) {
String A = st.nextToken();
if (A.equals("-") || A.equals("+") || A.equals("×") || A.equals("÷")) {
switch (A) {
case "+":
number = 1;
break;
case "-":
number = 2;
break;
case "×":
number = 3;
break;
case "÷":
number = 4;
break;
}
if (stack1.empty()) {
stack1.push(A);
num1 = number;
value1++;
} else {
num2 = number;
if (array[num1][num2] <= 0) {
stack1.push(A);
value1 += 1;
} else {
result1 += stack1.pop()+" ";
stack1.push(A);
}
}
}
else
result1 += A + " ";
}
for (int y = 0; y < value1; y++)
result1 += stack1.pop()+" ";
return result1;
}
public String getResult()
{
return result1;
}
}
3.真分数的实现现阶段还只有简单的想法,代码还没有编写完成。?(?????)?
注释:
PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
---|---|---|---|
Planning | 计划 | 1 | 5/6 |
Estimate | 估计这个任务需要多少时间 | 0.5 | |
Development | 开发 | 16 | |
Analysis | 需求分析 (包括学习新技术) | 4 | |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 0.5 | 0.5 |
Design UML | 设计项目UML类图 | 1 | |
Coding | 具体编码 | 18 | |
Code Review | 代码复审 | 2 | |
Test | 测试(自我测试,修改代码,提交修改) | 2 | |
Size Measurement | 计算工作量(实际时间) | 0.5 | |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 3 | |
合计 | 48.5 |
2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第一周
标签:老师 第一个 自己的 tokenizer rac 多少 tac question 后缀表达式
原文地址:https://www.cnblogs.com/Qiuxia2017/p/8933639.html