个人作业1——四则运算题目生成程序(基于控制台)
2017-03-07 22:00
435 查看
码云地址:https://coding.net/u/lwy1023/p/rg/git/blob/master/Demo01.java
1.需求分析:
a.完成一个基于控制台的四则运算程序,实现一个自动生成小学四则运算题目的命令行程序。除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
b.运算符为 +, −, ×, ÷
c.并且要求能处理用户的输入,并判断对错,统计正确率。
d.要求能处理用户输入的真分数, 如 1/2, 5/12 等
e.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目,Myapp.exe -n 10
功能设计:
a.随机生成两个整数或真分数
b.实现+、-、*、/ 四则运算
c.可判断输入答案的对错并统计正确率
3.设计实现:
本程序有一个Demo01类,主要分为三大块内容,主函数、随机生成整数和分数以及计算整数和分数。程序开始执行时先利用随机数0和1分别切换到分数计算和整数计算模式,接着再运行。其中涉及到main中的判断输入答案正确与否,真分数的化简,以及运算符的随机生成等方法。下面是部分重要代码:
随机生成分数、通配符、整数
public static String CreateOperator() {// 返回操作符
Random random = new Random();
String operator = "";
int flag = random.nextInt(4);
switch (flag) {
case 0:
operator = "+";
break;
case 1:
operator = "-";
break;
case 2:
operator = "*";
break;
case 3:
operator = "/";
break;
}
return operator;
}
整数计算:
public static int computeInt(int data1, int data2, String operator) { // 整数计算
int result = 0;// 保存运算结果
分数计算:
public static String computeFenshu(int data1, int data2, int data3, int data4, String operator) { // 分数计算,四个参数,一个运算符
String result = "";
if (operator.equals("+")) {
result = fracAdd(data1, data2, data3, data4);// 分数相加
判断输入答案正确错误:
if (choice == 1) {
int result = 0;
int data1 = CreateInt();
int data2 = CreateInt();
String op;
op = CreateOperator();
System.out.println(data1 + " " + op + " " + data2 + " " + "=");
result = computeInt(data1, data2, op);
Scanner Answer = new Scanner(System.in);
int answer = Answer.nextInt();
if (result == answer) {
System.out.println("正确");
righttext++;
} else {
System.out.println("错误");
errortext++;
}
4.程序测试:
自我评价:
本次设计让我深刻意识到了自己编程能力的不足,在很多基础的语法和结构上吃了亏,算法不清晰导致出现了很多细节上的问题,以及最后逻辑错误的调整与更正,今后还要多加努力,让自己的代码更加完善。
PSP:
1.需求分析:
a.完成一个基于控制台的四则运算程序,实现一个自动生成小学四则运算题目的命令行程序。除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
b.运算符为 +, −, ×, ÷
c.并且要求能处理用户的输入,并判断对错,统计正确率。
d.要求能处理用户输入的真分数, 如 1/2, 5/12 等
e.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目,Myapp.exe -n 10
功能设计:
a.随机生成两个整数或真分数
b.实现+、-、*、/ 四则运算
c.可判断输入答案的对错并统计正确率
3.设计实现:
本程序有一个Demo01类,主要分为三大块内容,主函数、随机生成整数和分数以及计算整数和分数。程序开始执行时先利用随机数0和1分别切换到分数计算和整数计算模式,接着再运行。其中涉及到main中的判断输入答案正确与否,真分数的化简,以及运算符的随机生成等方法。下面是部分重要代码:
随机生成分数、通配符、整数
public static String CreateOperator() {// 返回操作符
Random random = new Random();
String operator = "";
int flag = random.nextInt(4);
switch (flag) {
case 0:
operator = "+";
break;
case 1:
operator = "-";
break;
case 2:
operator = "*";
break;
case 3:
operator = "/";
break;
}
return operator;
}
public static int CreateInt() {// 返回一个整数 Random random = new Random(); return random.nextInt(10) + 1; }
整数计算:
public static int computeInt(int data1, int data2, String operator) { // 整数计算
int result = 0;// 保存运算结果
if (operator.equals("+")) { result = data1 + data2; } else if (operator.equals("-")) { result = data1 - data2; } else if (operator.equals("*")) { result = data1 * data2; } else { result = data1 / data2; } return result; }
分数计算:
public static String computeFenshu(int data1, int data2, int data3, int data4, String operator) { // 分数计算,四个参数,一个运算符
String result = "";
if (operator.equals("+")) {
result = fracAdd(data1, data2, data3, data4);// 分数相加
} else if (operator.equals("-")) { result = fracSub(data1, data2, data3, data4);// 分数相减 } else if (operator.equals("*")) { result = fracMul(data1, data2, data3, data4);// 分数相乘 } else { result = fractDiv(data1, data2, data3, data4);// 分数相除 } return result; } static String fracAdd(int data1, int data2, int data3, int data4) { // 以下代码能够在控制台上显示结果 // 需要调用求最大公约数的函数 // 需要调用求最小公倍数的函数 int denominator; int numerator; if (data2 == data4) // 分母相同时加分子 { denominator = data2; numerator = data1 + data3; } else // 否则同分比较分子 { denominator = data2 * data4; numerator = data1 * data4 + data2 * data3; } int gcd = gcd(numerator, denominator); denominator = denominator / gcd; numerator = numerator / gcd; String result = numerator + "/" + denominator; return result; } static String fracSub(int data1, int data2, int data3, int data4) { // 以下代码能够在控制台上显示结果 // 需要调用求最大公约数的函数 int denominator; int numerator; if (data2 == data4) // 分母相同时加分子 { denominator = data2; numerator = data1 - data3; } else // 否则同分比较分子 { denominator = data2 * data4; numerator = data1 * data4 - data2 * data3; } int gcd = gcd(numerator, denominator); denominator = denominator / gcd; numerator = numerator / gcd; String result = numerator + "/" + denominator; return result; } static String fracMul(int data1, int data2, int data3, int data4) { // 以下代码能够在控制台上显示结果 // 需要调用求最大公约数的函数 int denominator; int numerator; denominator = data2 * data4; numerator = data1 * data3; int gcd = gcd(numerator, denominator); denominator = denominator / gcd; numerator = numerator / gcd; String result = numerator + "/" + denominator; return result; } static String fractDiv(int data1, int data2, int data3, int data4) { // 以下代码能够在控制台上显示结果 // 需要调用求最大公约数的函数 int denominator; int numerator; numerator = data1 * data4; denominator = data2 * data3; int gcd = gcd(numerator, denominator); denominator = denominator / gcd; numerator = numerator / gcd; String result = numerator + "/" + denominator; return result; }
判断输入答案正确错误:
if (choice == 1) {
int result = 0;
int data1 = CreateInt();
int data2 = CreateInt();
String op;
op = CreateOperator();
System.out.println(data1 + " " + op + " " + data2 + " " + "=");
result = computeInt(data1, data2, op);
Scanner Answer = new Scanner(System.in);
int answer = Answer.nextInt();
if (result == answer) {
System.out.println("正确");
righttext++;
} else {
System.out.println("错误");
errortext++;
}
4.程序测试:
自我评价:
本次设计让我深刻意识到了自己编程能力的不足,在很多基础的语法和结构上吃了亏,算法不清晰导致出现了很多细节上的问题,以及最后逻辑错误的调整与更正,今后还要多加努力,让自己的代码更加完善。
PSP:
相关文章推荐
- 个人作业1——四则运算题目生成程序(java代码,基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- (修改)个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)