一.结对对象

二.本周内容

(一)继续编写上周未完成代码

1.本周继续编写代码,使代码支持分数类计算

2.相关过程截图

a.下图是上周编写的生成题目的类,不能运行。



下图是本周更新的代码,可以支持分数的产生,红色框内为主要更改区域

b.下图是代码中题目转后缀表达式的部分代码及运行结果截图

c.下图是代码中后缀表达式计算结果的部分代码及运行结果截图

3.关键代码解释

在题目中生成真分数及包含真分数的题目转换为后缀表达式

  • 生成真分数:这里我们让产生的随机数含有复数,举例,我们产生-49之间的随机数,如果产生随机数为负数,就将一个随机产生的真分数赋给一个String型的figure,如果产生的随机数为09,则将此随机数转换为String型的赋给figure,这样就完成了真分数的生成在题目中。
  • 含真分数的题目转后缀表达式:我们调用StringTokenizer类中的方法,将上面的题目转换为StringTokenizer类的一个对象,然后使用nextToken()方法,将其分为String的字符串,然后判断字符串的长度,如果字符串长度大于1,就将字符串直接输出,然后下面就是字符串为1的,包括整数和操作符,这个在上周已经解决,包括入栈出栈,都已解决。
  • 后缀表达式求值:正在编写中:将所有的数都转换为分数,然后调用之前编写类中的分数的加减乘除方法,然后完成求值,正在编写中。

(二)遇到的困难及解决方法【持续更新中......】

1.关于题目转换成后缀表达式的解决思路

题目转换成后缀表达式的原理是,如图:



这个要求的难点在于拿扫描到的操作符与栈顶的操作符比较优先级,高则进栈,低则输出栈顶元素并将扫描到的操作符压进栈里。

解决思路:

a.老师给的思路是编写一个数组,里面存放着操作符的优先级比较,然后在调用的时候用于比较。

b.对于老师给的思路,有一些不是很懂的地方。首先是存放操作符优先级比较的二维数组不太会编,然后就是具体调用时的代码实现不是很清楚。所以我转换了一下思路,从原理的本质上思考了一下:题目要求的四则运算只要求加减乘除四个操作符(因为我们组不用实现括号的产生),只有四个操作符的比较,通过if语句多判断几次就OK了。首先判断拿到的操作符是不是乘除一级的,如果是,则判断栈顶的操作符是不是加减,是则外面的优先级高,否则外面优先级低;如果拿到的操作符是加减一级的,则优先级肯定低于栈顶元素优先级。从而达到了判断优先级的目的。

(三)全部代码

第一部分:生成题目 //负责人:侯泽洋

import java.util.Stack;
import java.util.Random;
import java.util.ArrayList;
import java.util.Scanner; class Questions {
ArrayList<Object> array = new ArrayList<Object>();
Random generator = new Random();
char[] newchar = {'+', '-', '*', '/'};
protected int number;
int NUM; public Questions() {
number = 0;
} public Object getQuestion(int num) {
int num1 = num; while (num > 0) {
int figure = (int) generator.nextInt(9) + 1;
array.add(figure);
number = (int) (Math.random() * 4);
array.add(newchar[number]);
num--;
}
String obj = "";
while (num < 2 * num1) {
obj += array.get(num);
num++;
}
int other = (int) generator.nextInt(9) + 1;
array.add(other);
obj += other + "="; return obj;
}
}

第二部分:题目运算 //负责人:周亚杰,侯泽洋

//生成后缀表达式

public class Calculations {
public static void main(String[] args) {
Questions questions=new Questions();
Stack stack = new Stack(); Scanner Scan=new Scanner(System.in); char c;
int count=0,answer;
char[] operation = new char[100];
String str = (String) questions.getQuestion(3); System.out.println("请回答以下问题:\n"+str);
System.out.println("请输入你的答案:");
answer=Scan.nextInt(); for (int i = 0; i < str.length(); i++) {
c = str.charAt(i);
if (c >= '0' && c <= '9') { operation[i] = c;
count++; }
else { if (c == '*' || c == '/') {
if (stack.empty()) {
stack.push((char) c);
} else if ((char) stack.peek() == '*' || (char) stack.peek() == '/') {
operation[i] = (char) stack.pop();
stack.push(c);
} else
stack.push(c);
} else if (c == '+' || c == '-') {
if (stack.empty()) {
stack.push(c);
} else if ((char) stack.peek() == '+' || (char) stack.peek() == '-') {
operation[i] = (char) stack.pop();
stack.push(c);
} else {
operation[i] = (char) stack.pop();
stack.push(c);
} } else
stack.push(c); }
}
int num = stack.size();
for (int a = 0; a < num; a++) {
operation[str.length() + a] = (char) stack.pop();
}
//后缀表达式计算    //负责人:周亚杰

Stack<Integer> stack1 = new Stack<Integer>();

    int m, n, sum,num1=str.length()+(str.length()-count);

        for (int b = 0; b <= num1; b++) {
if (operation[b] >= '0' && operation[b] <= '9')
stack1.push((int) operation[b]-48);
else {
if (operation[b] == '+') {
m = stack1.pop();
n = stack1.pop();
sum = n + m;
stack1.push(sum);
} else if (operation[b] == '-') {
m = stack1.pop();
n = stack1.pop();
sum = n- m;
stack1.push(sum);
} else if (operation[b] == '*') {
m = stack1.pop();
n = stack1.pop();
sum = n * m;
stack1.push(sum);
} else if (operation[b] == '/') {
m = stack1.pop();
n = stack1.pop();
sum = n / m;
stack1.push(sum);
}
else if (operation[b] == ' ')
continue;
}
}
if ((int)stack1.peek()==answer)
System.out.println("恭喜你答对了!");
else
System.out.println("很遗憾,答错了!答案是:"+stack1.peek());
}
}

三.个人贡献度划分

周亚杰:50%

侯泽洋:50%

四.小组结对编程照片

2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算 第二周的更多相关文章

  1. 20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一 ...

  2. 20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 结对伙伴 20172326康皓越 博客地址(http://www.cnblogs.com/326477465-a/p/90 ...

  3. 20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172324 姓名 :曾程 伙伴第一周博客地址: 对结对伙伴的评价:一个很优秀的同学,在这次项目中 ...

  4. 20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 结对伙伴博客链接 刘辰同学对编程的积极程度很高,并且在编程能力上很不错,有 ...

  5. 20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172313 余坤澎 20172332 于欣月 20172326 康皓越 小组编程照片 设计思路 通过一个E ...

  6. 20172332『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172326康皓越 20172313余坤澎 20172332于欣月 小组编程照片 设计思路 设计一个生成符号 ...

  7. 20172302『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    一.结对对象 姓名:周亚杰 学号:20172302 担任角色:驾驶员(周亚杰) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...

  8. 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...

  9. 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周

    2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ...

随机推荐

  1. .Net文档下载

    public static void DownLoadFile(string fileName, HttpResponse Response, HttpServerUtility Server) { ...

  2. 《Effective C++》item25:考虑写出一个不抛异常的swap函数

    std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如: int main(int argc, _T ...

  3. vue+vux-ui+axios+mock搭建一个简单vue框架

    1.首先感谢同事 2.之前一直在做angularjs的项目,目前vue火热,所以自己搭建了一个的vue框架,在此作为记录 vue+vux-ui这里就不介绍了,有很多博客都写的很详细了. 下面简单记录下 ...

  4. ios应用数据存储方式(XML属性列表-plist) - 转

    一.ios应用常用的数据存储方式  1.plist(XML属性列表归档)  2.偏好设置  3.NSKeydeArchiver归档(存储自定义对象)  4.SQLite3(数据库,关系型数据库,不能直 ...

  5. 0CO_PC_01 成本对象控制: 计划/实际数据

    用户提出要取生产订单的成本分析明细,分析目标和实际的差异. 查了一下,可以使用 BW标准数据源:0CO_PC_01 其中,值类型:10(实际).20(计划).30(目标) 货币类型:20(成本控制范围 ...

  6. spark上的一些常用命令(一)

    1. 加速跑 spark-sql --name uername --num-executors --driver-memory 8G --executor-memory 8G 2. 上传数据 建表 ) ...

  7. GoldData学习实例-采集官网新闻数据

    概述 在本节中,我们将讲述抓取政府官网地方新闻.并将抓取的新闻数据融入到以下两张数据表news_site和news中. news_site(新闻来源) 字段 类型 说明 id bigint 主键,自动 ...

  8. Qt样式总结

    说明 将Qt样式进行一下总结, 以后逐步更新 QPushbutton QPushbutton setStyleSheet("QPushButton{ border:1px solid #40 ...

  9. 17-[JavaScript]- 内置对象 Array,String,Date,Math

    1.Array数组 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  10. Codeforces 873 B. Balanced Substring(前缀和 思维)

    题目链接: Balanced Substring 题意: 求一个只有1和0的字符串中1与0个数相同的子串的最大长度. 题解: 我的解法是设1的权值是1,设0的权值是-1,求整个字符串的前缀和并记录每个 ...