2017-2018-2 20172314 『Java程序设计』课程 结对编程练习_四则运算
相关过程截图
- 截图为我负责的部分关于计算的测试
关键代码解释
根据代码中的部分解释,这部分代码实现了结果的整数和分数的输出,如果算出的结果为一个真分数,就输出真分数的形式,如果结果为整数,就输出整数形式。
private RationalNumber becom(String str) {
StringTokenizer tokenizer = new StringTokenizer(str, "/"); //以/为分隔符把每个分式拆开
int zi = Integer.parseInt(tokenizer.nextToken());
int mu;
if (tokenizer.hasMoreTokens()) //如果存在分式就输出
mu = Integer.parseInt(tokenizer.nextToken());
else
mu = 1; //如果没有分式就把分母变为1 return new RationalNumber(zi, mu);
}这部分判断正误,并统计正确错误的题目数。
for (int y = 0; y < number.length; y++) {
if (number[y].equals(rightanswer[y])) { // 比较正确答案与用户的答案
System.out.println("正确!");
right++; // 正确题数加一
} else {
System.out.println("错误!");
wrong++; // 错误题数加一
System.out.println("正确答案是" + rightanswer[y]);
}
}
遇到的困难及解决方法
问题一:将后缀表达式用空格作为分隔符分开存入栈中后,定义为String型还是char型都是错误的
问题一解决:由于之后要调用RationalNumber方法,其参数为int型,这样就产生了矛盾,之后把a1,a2都定义为Object型的就可以避免这一矛盾。
Object意思就是参数是可变的,意思就是说,你在调用这个方法的时候你可以给他传一个String类型的参数,也可以给他传一个Int类型的参数,或者多个不同类型的参数,很灵活的。
- 问题二:不知道如何使用StringTokenizer方法
- 问题二解决:在查看了API文档之后,尝试着使用了一下,但错误很多,StringTokenizer处显示红色,然后我便声明了一个构造方法,并实例化,结果仍是错误的,最后发现可能是没有导入包的原因,便把构造方法删除,直接加包名java.util.StringTokenizer。import导入包StringTokenizer就是可以直接使用里面的方法,所以,就已经有了构造方法,可以直接实例化创建对象。参考java导入包
在Java代码中导入包,与其说为了使用里面的方法,不如按照面向对象语言的特点,说成为了使用里面的类,因为Java作为典型的面向对象语言,他的程序是以数据作为基础,以类的形式组织的,类主要包括:你自己的写的类和你的类中需要用到的现有的类,这些现有的类基本上都是以package包的形式存在的,你只有导入了这个类所在的包,才能使用这个类。

问题三:在计算时,最开始想要通过判断一个字符是否是数字来决定什么时候进行计算。
问题三解决:在网上查找之后找到了Character.isDigit(char)方法,Java中怎样判断一个字符串是否是数字,但最后选择直接用equals方法把四个运算符找出来,没有用这个方法。
问题四:运行时显示18行有错误。
问题四解决:在单步调试之后,是这里的循环出了问题,第二遍循环就结束了,感觉是push进character栈中的nextToken是在if判断中的nextToken的下一个,并不是同一个运算符,所以定义一个xx来代替就避免了,再次运行之后这里没有错误。
项目中自己负责的部分
我负责后缀表达式的计算并判断用户计算的正误,得到正确率。并且打算做文件的部分。代码如下:
计算后缀表达式
package test; import test.RationalNumber;
import java.util.Stack ;
import java.util.StringTokenizer; public class Judge { Stack<String> calculate; public Judge() {
calculate = new Stack<>();
} public String answer(String Stringwyh) {
//以空格为分隔符分开每个分数和运算符
StringTokenizer NUM = new StringTokenizer(Stringwyh, " "); while (NUM.hasMoreTokens()) {
String xx = NUM.nextToken();//xx表示一个分数或字符 if (xx.equals("+")) {
String a = calculate.pop();
String b = calculate.pop(); String re = becom(a).add(becom(b)).toString(); calculate.push(re);
}//如果是运算符则进行计算
else if (xx.equals("-")) {
String a = calculate.pop();
String b = calculate.pop(); String re = becom(a).subtract(becom(b)).toString(); calculate.push(re);
}//如果是运算符则进行计算
else if (xx.equals("*")) {
String a = calculate.pop();
String b = calculate.pop(); String re = becom(a).multiply(becom(b)).toString(); calculate.push(re);
}//如果是运算符则进行计算
else if (xx.equals("÷")) {
String a = calculate.pop();
String b = calculate.pop(); String re = becom(a).divide(becom(b)).toString(); calculate.push(re);
}//如果是运算符则进行计算
else
calculate.push(xx);//如果是将分数则存入calculate栈中
}
return calculate.pop();
} private RationalNumber becom(String str) {
StringTokenizer tokenizer = new StringTokenizer(str, "/");
int zi = Integer.parseInt(tokenizer.nextToken());
int mu;
if (tokenizer.hasMoreTokens())
mu = Integer.parseInt(tokenizer.nextToken());
else
mu = 1; return new RationalNumber(zi, mu);
} }判断正误
package test; import test.Judge;
import test.NifixExpression; import java.util.Scanner; public class Test1 {
public static void main(String[] args) { int right = 0;
int wrong = 0;
double rate;
Scanner scan = new Scanner(System.in);
//生成题目
System.out.print("整数运算为1,分式运算为2: ");
int a = scan.nextInt();
System.out.print("请输入您要做的题目等级: ");
int b = scan.nextInt();
System.out.print("请输出该等级的题目量: ");
int c = scan.nextInt(); String[] number = new String[c];//数组number用来存放用户输入的答案
String rightanswer[] = new String[c];//数组rightanswer用来存放正确答案
for (int d = 1; d <= c; d++) {
NifixExpression num = new NifixExpression();
SuffixExpression num1 = new SuffixExpression();
Judge num2 = new Judge();
System.out.print("问题" + d + ": " + num.Level(b, a) + " " );
int e = scan.nextInt();
number[d - 1] = Integer.toString(e);
rightanswer[d - 1] = num2.answer(num1.SuffixExpression(num.Level(b,a)));
System.out.println();
System.out.println(); //rightanswer[d - 1] = num1.answer(); for (int y = 0; y < number.length; y++) {
if (number[y].equals(rightanswer[y])) {
System.out.println("正确!");
right++;
} else {
System.out.println("错误!");
wrong++;
System.out.println("正确答案是" + rightanswer[y]);
} } rate = (double) right / c; System.out.println("正确率为" + rate); }
}
}
个人贡献度划分
我们组每个人的任务都差不多,少了那部分都不行,都很重要就每人33.3%吧。
对结对的小伙伴做出评价给出小伙伴博客链接(重点指出需要改进的地方)
码云链接
小组结对编程照片
参考
2017-2018-2 20172314 『Java程序设计』课程 结对编程练习_四则运算的更多相关文章
- 2017-2018-2 20172323 『Java程序设计』课程 结对编程练习_四则运算
结对编程的好丽友 - 20172323 王禹涵:中缀转后缀 - 20172314 方艺雯:后缀表达式的计算 - 20172305 谭鑫:中缀表达式的输出 需求分析 能随机生成由使用者确定的任意多道四则 ...
- 2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算
2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算 经过第一阶段的学习,同学们已经熟悉了这门语言基本的用法.在一次又一次对着电脑编写并提交代码,进行练习的时候,有没有觉 ...
- 2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周
2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周 博客要求 组内同学需各自发表博客 博客中需包含以下内容: 相关过程截图 关键代码解释 遇到的困难及解决 ...
- 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算_第三周
2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址: @王志伟 四则运算第一周博客 @仇夏四则运算第一周博客 ...
- 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周
2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ...
- 2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算
2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算 需求分析: 支持整数,可进行多运算符运算,有优先级. 设计思路: 在有括号的情况下,先计算得出括号中的结果,如 ...
- 20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结
20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 在这次项目的完成过程中刘辰同学付出了很多,在代码的实践上完成的很出色,在技 ...
- 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结
20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...
- 20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一 ...
随机推荐
- 4 二维数组中的查找 JavaScript
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- Jquery中复选框选中取消实现文本框的显示隐藏
标签内容 <div class="box"> 请编写javascript代码,完成如下功能要求:<br /> 1.取消复选款后,要求促销价格.促销开始结束日 ...
- Hadoop入门学习路线
走上大数据的自学之路....,Hadoop是走上大数据开发学习之路的第一个门槛. Hadoop,是Apache的一个开源项目,开发人员可以在不了解分布式底层细节,开发分布式程序,充分利用集群进行高速运 ...
- (杭电 1702)ACboy needs your help again!
ACboy needs your help again! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- Blender2.79建模快捷键
快捷键 基本操作 滚动鼠标中键滚轮:视图放大或缩小 按住鼠标中键滚轮:视图旋转 单独鼠标右键:选择物体 单独鼠标右键:放置物体 shift+鼠标中键:视图平移 小键盘数字1:前视图:ctrl+1:后视 ...
- 虚拟机的三种联网模式(桥接模式、NAT 模式、仅主机模式)
虚拟机的网络连接方式分为三种,分别是桥接模式.NAT 模式.和仅主机模式,三种连接模式存在着一定的差异,那么我们该如何选择适合自己的连接模式呢? 1.桥接模式:在此模式下,虚拟机相当于一台独立的电脑, ...
- mac+win10:UEFI分区方式下安装windows 10
小编,最近通过在远景论坛上寻找教程--安装双系统(win10+mac os).经过一天努力,成功安装win10.为此,特地分享给各位正在需求教程的朋友,我在UEFI分区方式下安装windows 10的 ...
- 北京Uber优步司机奖励政策(9月28日~10月4日)
用户组:优步北京人民优步A组(适用于9月28日-10月4日) 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不 ...
- CRL2.1更新
增加没有主键ID的抽象类,使能自义主键字段实现MODEL抽象类定义结构为 /// <summary> /// 基类,不包含任何字段 /// 如果有自定义主键名对象,请继承此类型 /// & ...
- package.json中的devDependencies和dependencies有啥区别?
如果你的项目是发布到npm的一个包, 那么这个包的package.json中的dependencies中的依赖是会被下载下来到这个包的node_modules文件夹中的(如果你的项目本身没有这个依赖) ...