博客班级 | AHPU软件工程 |
---|---|
作业要求 | 实现小学四则运算并优化 |
作业目标 | 熟练掌握代码编写 |
学号 | 3180701209 |
作业目标
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
代码
定义变量
Scanner input=new Scanner(System.in);
double count;
int answer,answer1,answer2;
int a;//运算式第一个数字
int b;//运算式第二个数字
int sum;
int[] data=new int[10];//结果数组
int[] data1=new int[10];
int[] data2=new int[10];
String[] data3=new String[30];//运算符数组
int m=10;
int num,num1,num2,num3;
加法
public void add() {
System.out.println("选择你要做题数目");
Scanner intput=new Scanner(System.in);
num=intput.nextInt();
int i;
for(i=0;i<num/2;i++) {
b=(int) Math.round(Math.random()*10);
a=(int) Math.round(Math.random()*10);
sum=a+b;
data[i]=sum;
data1[i]=a;
data2[i]=b;
data3[i]="+";
}
int a=num-i;
int b=i;
for(;i<b+2*a-1;i+=2)
{
data1[i]=(int) Math.round(Math.random()*10);
data1[i+1]=(int) Math.round(Math.random()*10)+data1[1];
data2[i]=(int) Math.round(Math.random()*10);
data2[i+1]=(int) Math.round(Math.random()*10)+data1[1];
data[i]=(data1[i]*data2[i+1])+(data1[i+1]*data2[i]);
data[i+1]=data1[i+1]*data2[i+1];
int num=data[i]<data[i+1]? data[i]:data[i+1];
int maxb=1;
for (int k = num; k >=2; k--) {
if (data[i]%k==0 && data[i+1]%k==0) {
maxb*=k;
data[i]=data[i]/k;
data[i+1]=data[i+1]/k;
}
}
}
int j;
for(j=0;j<num/2;j++)
{
System.out.print(data1[j]+"+");
System.out.print(data2[j]);
System.out.print("=");
answer1=input.nextInt();
if(answer1==data[j])
{
System.out.println("恭喜答案正确");
count++;
}else {
System.out.println("答案错误");
}
}
b=j;
for(;j<b+2*a-1;j+=2)
{
System.out.print(data1[j]+"/"+data1[j+1]+"+"+data2[j]+"/"+data2[j+1]+"=");
answer1=input.nextInt();
System.out.print("/");
answer2=input.nextInt();
if(answer1==data[j]&&answer2==data[j+1])
{
System.out.println("恭喜答案正确");
count++;
}else {
System.out.println("答案错误");
}
}
System.out.println("一共答对"+count+"道题目");
}
减法
public void min() {
System.out.println("选择你要做题数目");
Scanner intput=new Scanner(System.in);
int num1=intput.nextInt();
if(num1<m-num) {
for(int i=0;i<num1;i++) {
a=(int)(Math.random()*100);
b=(int)(Math.random()*100);
sum=a-b;
data[i]=sum;
data1[i]=a;
data2[i]=b;
data3[i]="-";
}
for(int i=0;i<num1;i++)
{
System.out.print(data1[i]+"-");
System.out.print(data2[i]);
System.out.print("=");
answer=input.nextInt();
if(answer==data[i]) {
System.out.println("恭喜答案正确");
count++;
}else {
System.out.println("答案错误");
}
if(i==num1-1) {
System.out.println("一共答对"+count+"道题目");
}
}
}
}
乘法
public void mult() {
System.out.println("选择你要做题数目");
Scanner intput=new Scanner(System.in);
int num2=intput.nextInt();
if(num2<m-num-num1) {
for(int i=0;i<num2;i++){
a=(int)(Math.random()*8+1);
b=(int)(Math.random()*8+1);
sum=a*b;
data[i]=sum;
data1[i]=a;
data2[i]=b;
data3[i]="*";
}
for(int i=0;i<num2;i++)
{
System.out.print(data1[i]+"*");
System.out.print(data2[i]);
System.out.print("=");
answer=input.nextInt();
if(answer==data[i]) {
System.out.println("恭喜答案正确");
count++;
}else {
System.out.println("答案错误");
}
if(i==num2-1) {
System.out.println("一共答对"+count+"道题目");
}
}
}
}
除法
public void division() {
System.out.println("选择你要做题数目");
Scanner intput=new Scanner(System.in);
int num3=intput.nextInt();
if(num3<m-num-num1-num2) {
for(int i=0;i<num3;i++){
a=(int)(Math.random()*10);
b=(int)(Math.random()*9+1);
sum=a/b;
data[i]=sum;
data1[i]=a;
data2[i]=b+1;
data3[i]="/";
}
for(int i=0;i<num3;i++)
{
int yushu=0;
System.out.print(data1[i]+"/");
System.out.print(data2[i]);
System.out.print("=");
answer=input.nextInt();
System.out.println("是否存在余数,存在:1 不存在:0");
int choice=input.nextInt();
if(choice==1) {
System.out.println("请输入余数:");
yushu=input.nextInt();
}
if(answer==data[i]&&yushu==(data1[i]%data2[i])) {
System.out.println("恭喜答案正确");
count++;
}else {
System.out.println("答案错误");
}
if(i==num3-1) {
System.out.println("一共答对"+count+"道题目");
}
}
}
}
选择运算方式菜单
public void menu() {
System.out.println("1.加法");
System.out.println("2.减法");
System.out.println("3.乘法");
System.out.println("4.除法");
System.out.println(" 请输入:");
String choice1=input.next();
switch(choice1) {
case "1":
add();
break;
case "2":
min();break;
case "3":
mult();break;
case "4":
division();break;
default:
System.out.println("输入错误,请从新输入");
break;
}
}
主方法
public static void main(String[] args) {
// TODO Auto-generated method stub
guocheng h=new guocheng();
int f=1;
while(f==1)
{
h.menu();
System.out.println("请问是否继续输入是,是:1 否:0");
Scanner intput=new Scanner(System.in);
f=intput.nextInt();
}
}
运行截图
作业小结
(1)psp表格
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 100 | 80 |
Development | 开发 | 200 | 250 |
Analysis | 需求分析(包括学习新技术) | 20 | 40 |
Design Spec | 生成设计文档 | 30 | 50 |
Design Review | 设计复审 | 5 | 10 |
Coding Standard | 代码规范 | 3 | 5 |
Design | 具体设计 | 10 | 12 |
Coding | 具体编码 | 80 | 90 |
Code Review | 代码复审 | 60 | 70 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 15 |
Reporting | 报告 | 9 | 6 |
Test Report | 测试报告 | 3 | 2 |
Size Measurement | 计算工作量 | 3 | 2 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 5 | 3 |
(2)心得和经验
了解使用markdow编辑器来编写,尝试使用java编写,学到了很多知识,通过查阅书本、网上资料完成基本代码编写。代码重复繁琐有冗余,需要再加以改进。