zoukankan      html  css  js  c++  java
  • 个人作业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:

  • 相关阅读:
    SNAT的作用是什么
    Maven命名规范收集
    Linux下Git命令中文显示乱码的问题解决:274232350256256346200273347273223
    HttpClient中文乱码问题排查
    Ubuntu 16.04通过NetworkManager(GUI)配置网桥
    HTML5 Video P2P技术研究(转)
    CentOS 6.9下KVM虚拟机快照创建、删除、恢复(转)
    CentOS 6.9下KVM虚拟机通过virt-clone克隆虚拟机(转)
    开源规则引擎 drools
    评估系统负载
  • 原文地址:https://www.cnblogs.com/lwy1023/p/6517010.html
Copyright © 2011-2022 走看看