个人作业1——四则运算题目生成程序(基于控制台)

码云地址: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

  1. 功能设计:

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:

posted on 2017-03-07 22:00  李雯钰  阅读(98)  评论(2编辑  收藏  举报

导航