java 编程联系_《JAVA程序设计》结对编程联系_四则运算(第一周:阶段总结)...

结对对象与其博客链接

需求分析

(一)功能需求

1.自动生成题目(本周已完成)

可生成包含不同运算符个数的题目

2.题目运算(判题)(这周先做了真分数,运算和后缀计算打算下周做)

实现中缀表达式转为后缀表达式并计算

判断用户答题正误,并输出正确结果

3.支持真分数(第二周内容,本周提前做了)

实现分数算式的计算

3.题目去重(扩展需求)

实现对自动生成表达式中相同题目的去重

(二)对需求的理解:

1.能随机生成多道四则运算题目,可由用户输入控制

2.支持整数和真分数(第二周内容,本周已做)

3.支持多运算符,运算符个数可由用户输入控制

4.能够判断正误,错误时能提醒并输出正确答案(这周先做了真分数,运算和后缀计算打算下周做)

5.可以计算正确率

设计思路

1.我们对支持多运算符的理解就是为:在输出前,由用户输入所要求的运算符个数,然后程序运行自动给出相应算式。

2.提前做了第二周真分数的内容,我们没有做出选项来确认用户是否需要进行真分数练习,希望下周可以对此进行优化,计算和后缀转换的内容打算下周做。

3.由于学习c语言的时候曾设计过类似于这样的四则运算的程序,可以说思路很快就捋顺了,具体怎么实施则经过商讨后翻译成Java语言。

4.总体思路就是这样了,具体思路见下面的UML类图。

UML类图

20190402161154865296.png

实验过程中的关键代码解释

题目生成代码(Timushengcheng.java)

public class Timushengcheng {

String[]Shengchengtimu;//设置生成题目的数组

int fuhaoshu,num;//接收用户所需的设定(题目个数、符号数个数)

public Timushengcheng(int num ,int fuhaoshu)//构造题目生成函数

{

this.num=num;

this.fuhaoshu=fuhaoshu;

Shengchengtimu=new String[num];

}

public String questionfuhaoshu(int a)//生成单个用户要求运算符个数的题目的方法

{

String express="";

String[]OC={"+","-","×","÷"};

for (int c=0;c

Zhenfenshu b = new Zhenfenshu();

String d=b.getZhenfenshu();

String e=OC[(int) (Math.random() * 4)];

while (d=="0"&&e=="÷") {

Zhenfenshu f=new Zhenfenshu();

d = f.getZhenfenshu();

}

express +=d+" "+e+ " ";

}

Zhenfenshu c=new Zhenfenshu();

String e=c.getZhenfenshu();

while (express.charAt(4*fuhaoshu-1)=='÷'&&e=="0")

{

Zhenfenshu d=new Zhenfenshu();

e=d.getZhenfenshu();

}

express+=e+" "+"=";

return express;

}

public void QuestionNum()//生成用户要求个数的题目,且将其放入生成题目数组中保存的方法

{

Timushengcheng F=new Timushengcheng(num,fuhaoshu);

for(int a=0;a

Shengchengtimu[a]=F.questionfuhaoshu(fuhaoshu);

}

public String[] getShengchengtimu()//返回生成题目数组的方法

{

return Shengchengtimu;

}

public String getShengchengtimu2(int a) //返回数组中指定索引处的方法

{

String b;

b=Shengchengtimu[a];

return b;

}

public String toString() //输出生成题目数组中表达式的方法

{

String a="";

for (int b=0;b

a+=Shengchengtimu[b]+"\n";

return a;

}

}

真分数生成代码(Zhenfenshu.java)

public class Zhenfenshu {

int numerator, denominator;

public Zhenfenshu() //设置真分数生成函数

{

numerator= (int) (Math.random()*51);

denominator= (int) (Math.random()*51);

if(denominator==0)

denominator=1;

xianzhi1();

}

public void xianzhi1()//主要使分母不为零

{

if (numerator != 0) {

int common = xianzhi2(Math.abs(numerator), denominator);

numerator = numerator / common;

denominator = denominator / common;

}

}

private int xianzhi2(int num1, int num2) //主要使分母大于分子(真分数)

{

while (num1 != num2)

if (num1 > num2)

num1 = num1 - num2;

else

num2 = num2 - num1;

return num1;

}

public String getZhenfenshu() //化简得到的分数直至最简

{

String result;

if(numerator==0)

result="0";

else

if(denominator==1)

result=numerator+"";

else

result=numerator+"/"+denominator;

return result;

}

}

```

测试方法

测试程序代码(TimushengchengTest.java)

import java.util.Scanner;

public class TimushengchengTest {

public static void main(String[] args){

int num,fuhaoshu;

Scanner scan=new Scanner(System.in);

System.out.print("题目个数为:");

num=scan.nextInt();

System.out.print("题目中的运算符个数为:");

fuhaoshu=scan.nextInt();

Timushengcheng a=new Timushengcheng(num,fuhaoshu);

a.QuestionNum();

System.out.println("生成的"+num+"个表达式为:");

System.out.println(a);

}

}

运行结果截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值