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

结对伙伴

  • 学号 :20172307

  • 姓名 :黄宇瑭

  • 伙伴第一周博客地址

  • 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一些优化的方案,发现代码的不足之处,但是编写代码的能力有待提高,继续加油吧!!


小组结对编程的photo

HERE!


项目中自己负责的部分

具体的编码

个人贡献度划分

在我看来,虽然主要是我进行了具体的编码工作,但是代码的最终实现离不开黄宇瑭同学对代码的测试以及指正不足,正是这样我才能投入到编码中去,所以贡献度的划分我觉得应该是55开

相关过程的截图

  • 生成题目类驱动类的运行截图


  • 中缀表达式转为后缀表达式类的驱动类运行截图


  • 后缀表达式计算的驱动类运行截图


关键代码解释

1.在生成表达式的类Create中使用了自己编写的生成随机分数的类Fraction
  • Create类代码如下:
/*
Create.java 作者:赵晓海 黄宇瑭
用于生成用户指定个数指定等级的题目,且题目中含有分数
*/
public class Create {
String[]Arraylist;//保存题目的数组
int num,rate;//题目的个数和等级 //构造函数
public Create(int num ,int rate)
{
this.num=num;
this.rate=rate;
Arraylist=new String[num];
} //生成相应等级的一个题目的方法
public String questionRate(int a)
{
String express="";
String[]OC={"+","-","×","÷"}; for (int c=0;c<a;c++) {
Fraction b = new Fraction();
String d=b.getFraction();
String e=OC[(int) (Math.random() * 4)];
while (d=="0"&&e=="÷") {
Fraction f=new Fraction();
d = f.getFraction(); }
express +=d+" "+e+ " ";
} Fraction c=new Fraction();
String e=c.getFraction();
while (express.charAt(4*rate-1)=='÷'&&e=="0")
{
Fraction d=new Fraction();
e=d.getFraction();
} express+=e+" "+"=";
return express;
}
//生成相应个数,相应等级题目,且将其放入ArrayList数组中保存的方法
public void QuestionNum(){
Create F=new Create(num,rate);
for(int a=0;a<num;a++)
Arraylist[a]=F.questionRate(rate);
} //返回ArrayList数组的方法
public String[] getArraylist() {
return Arraylist;
} //返回数组中指定索引处表达式的方法
public String getArraylist2(int a)
{
String b;
b=Arraylist[a];
return b;
}
//输出的得到的表达式的方法
public String toString() {
String a="";
for (int b=0;b<num;b++)
a+=Arraylist[b]+"\n";
return a;
}
}
  • Fraction类代码如下:
/*
Fraction.java 作者:赵晓海 黄宇瑭
用于生成随机最简分数或者整数且不大于50
*/
public class Fraction {
int numerator, denominator; //构造函数
public Fraction() {
numerator= (int) (Math.random()*51);
denominator= (int) (Math.random()*51);
if(denominator==0)
denominator=1;
reduce();
}
//保证遵循分数的规则
public void reduce() {
if (numerator != 0) {
int common = gcd(Math.abs(numerator), denominator); numerator = numerator / common;
denominator = denominator / common;
}
}
//保证遵循分数的规则
private int gcd(int num1, int num2) {
while (num1 != num2)
if (num1 > num2)
num1 = num1 - num2;
else
num2 = num2 - num1; return num1;
} //得到最简分数或者整数的方法
public String getFraction()
{
String result;
if(numerator==0)
result="0";
else
if(denominator==1)
result=numerator+"";
else
result=numerator+"/"+denominator;
return result;
}
}
2.在计算后缀表达式的类Calculate中直接使用了第七章的RationalNumber类
  • Calculate类代码如下:
/*
Calculate.java 作者:赵晓海 黄宇瑭
用于计算一个后缀表达式
*/
import chap7.RationalNumber; import java.util.Stack; public class Calculate { String [] str1;
String result;//计算结果 //构造函数
public Calculate (String calculate){
str1=calculate.split("\\s");
} //将字符串形式的整数或者分数转换为RationalNumber类的对象的方法
public RationalNumber toRationalNumber(String num){
if (num.contains("/")==false){
int a =Integer.parseInt(num);
RationalNumber rationalNumber1 =new RationalNumber(a,1);
return rationalNumber1;
}
else {
/* StringTokenizer st = new StringTokenizer(num,"/");
int numerator =Integer.parseInt(st.nextToken("/"));
int denominator=Integer.parseInt(st.nextToken("/"));
*/
String[] Array =num.split("/");
int numerator = Integer.parseInt(Array[0]);
int denominator=Integer.parseInt(Array[1]); RationalNumber rationalNumber2 =new RationalNumber(numerator,denominator);
return rationalNumber2;
}
} //计算中缀表达式,并将结果保存在result中的方法
public void ToResult(){
Stack stack1=new Stack();
int start =0; while (start<str1.length){
if (str1[start].equalsIgnoreCase("+")==false&&str1[start].equalsIgnoreCase("-")==false&&str1[start].equalsIgnoreCase("×")==false&&str1[start].equalsIgnoreCase("÷")==false){ stack1.push(str1[start]);
}
else
if (str1[start].equalsIgnoreCase("+")==true){
RationalNumber num1=this.toRationalNumber(String.valueOf(stack1.peek()));
stack1.pop();
RationalNumber num2=this.toRationalNumber(String.valueOf(stack1.peek()));
stack1.pop();
RationalNumber finish =num2.add(num1);
String str3=finish.toString();
stack1.push(str3);
}
else
if (str1[start].equalsIgnoreCase("-")==true){
RationalNumber num1=this.toRationalNumber(stack1.peek().toString());
stack1.pop();
RationalNumber num2=this.toRationalNumber(stack1.peek().toString());
stack1.pop();
RationalNumber finish =num2.subtract(num1);
String str3=finish.toString();
stack1.push(str3);
}
else
if (str1[start].equalsIgnoreCase("×")==true){
RationalNumber num1=this.toRationalNumber(stack1.peek().toString());
stack1.pop();
RationalNumber num2=this.toRationalNumber(stack1.peek().toString());
stack1.pop();
RationalNumber finish =num2.multiply(num1);
String str3=finish.toString();
stack1.push(str3);
}
else
{
RationalNumber num1=this.toRationalNumber(String.valueOf(stack1.peek()));
stack1.pop();
RationalNumber num2=this.toRationalNumber(String.valueOf(stack1.peek()));
stack1.pop();
RationalNumber finish =num2.divide(num1);
String str3=finish.toString();
stack1.push(str3);
} start++;
}
String str4=stack1.peek().toString();
result=str4;
} //得到计算结果的方法
public String getResult() {
return result;
} }

遇到的困难及解决办法

  • 问题一:在编写代码时判断两字符串是否相等使用`==``导致出错。

  • 问题一解决方法:

通过组内商讨发现问题所在 ,并改用.equals()方法


  • 问题二:在运行计算后缀表达式的驱动类时出现越界错误

  • 运行错误截图如下:

  • 问题二解决方案:

通过单步调试恍然大悟,String型整数的长度不应定是1,要是整数,字符串中没有字符/即可,于是通过查API找到String类中的Contains方法适用

  • 调试成功的截图如下:

  • 代码的错误之处:

  • 代码的改正之处:


项目的码云链接

20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结的更多相关文章

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

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

  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. 2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算 第二周

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

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

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

随机推荐

  1. 联想拯救者s15k重装w10系统教程

    目的:1.自己平常健忘,且总是要重装系统,2.给看到此篇文章的人一点参考 ps:联想拯救者s15k系列,带有两个硬盘,一个是装系统的硬盘,大小约120G,一个是资料盘,大小约900G,系统重装在小硬盘 ...

  2. Hive HBase Integration 集成

    官方文档:https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration 1.在hive/lib目录下找到hive-hbase-ha ...

  3. 求助:将以下ES5格式代码转换为ES6格式!!!

    function Slider(id){     //属性     //  1. 通过id获取元素对象(大盒子)     this.bigBox = document.getElementById(i ...

  4. PhpStorm 回到上次编辑位置的快捷键

    回到上次编辑位置 Ctrl + Alt + <- (向后) Ctrl + Alt + -> (向前) 这个快捷键有时和电脑桌面快捷键冲突.解决办法: win + D 回到电脑桌面,右键-& ...

  5. C语言数组截取常见问题

    这是一段数组截取的代码,函数功能是检查后面的'*'的数量,若多于指定输入数,则把多余的'*'删除 void fun( char *a,int n ) { char *p = a; while(*p) ...

  6. golang中的字符串拼接

    go语言中支持的字符串拼接的方法有很多种,这里就来罗列一下 常用的字符串拼接方法 1.最常用的方法肯定是 + 连接两个字符串.这与python类似,不过由于golang中的字符串是不可变的类型,因此用 ...

  7. 百度地图API和高德地图API资料集锦

    [高德地图API]从零开始学高德JS API(五)路线规划——驾车|公交|步行   [高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自 ...

  8. WPF中的动画——(一)基本概念

    WPF的一个特点就是支持动画,我们可以非常容易的实现漂亮大方的界面.首先,我们来复习一下动画的基本概念.计算机中的动画一般是定格动画,也称之为逐帧动画,它通过每帧不同的图像连续播放,从而欺骗眼和脑产生 ...

  9. 【HNOI2014】抄卡组

    题面 题解 如果所有的字符串都有通配符,那么只要比较不含通配符的前缀和后缀就可以了. 否则一定有一个串没有通配符.找出这个字符串,然后将所有串与这个串匹配,通配符将\(B\)分成一段一段在\(A\)上 ...

  10. 菜鸟vimer成长记——目录

    菜鸟vimer成长记——第0章.我眼中的vim学习 菜鸟vimer成长记——第1章.统一概念 菜鸟vimer成长记——第2.0章.模式初探 菜鸟vimer成长记——第2.1章.normal模式 菜鸟v ...