您的位置:首页 > 其它

个人作业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 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:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: