zoukankan      html  css  js  c++  java
  • 20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    小组成员

    • 20172313 余坤澎
    • 20172332 于欣月
    • 20172326 康皓越

    小组编程照片

    1333460-20180509231140469-459330316.png

    设计思路

    1. 通过一个Element和Num类来作为基本元素获得表达式
    2. 通过一个Expression来将各个元素组合起来
    3. 通过Cal将表达式计算出来
    4. 通过用户类将结果计算出来,并判断其正负

      重要代码

     public void getNum() {
            Random num = new Random();
            numerator = num.nextInt(9);//分子
            denominator = num.nextInt(9)+1;//分母
            if (denominator == 1 && numerator != 0)//分母为1,结果为分子。
                number = numerator + "";
            else if (numerator == 0)//分子为0,结果为分母。
                number = denominator + "";
            else if (denominator == numerator )
                number = 1 + "";
            else {
                reduce();//约分
                if (numerator < denominator)//约分后分子小于分母
                    number = " ( "+ numerator + "/" + denominator+" ) ";
                else if (numerator > denominator)//约分后分子大于分母,交换分子分母
                    number = " ( "+denominator + "/" + numerator+" ) ";
            }
        }
        //约分的方法
        private int gcd(int num1,int num2)
        {
            while (num1 !=num2) {
                if (num1 > num2)
                    num1 = num1 - num2;
                else
                    num2 = num2 - num1;
            }
    
            return num1;
        }
        private void reduce()
        {
            if (numerator !=0)
            {
                int common = gcd(Math.abs(numerator),denominator);
    
                numerator = numerator/common;
                denominator = denominator/common;
            }
        }

    本段为生成分数以及通分,提取公约数

     Random a = new Random();
                //是否有括号
                int or = a.nextInt(2);
                //无括号
                if (or == 0) {

    通过随机数来判断表达式中是否有括号0为没有,1为有。

     for (int index = 0; index <= times; index++) {
                        int c = time.nextInt(4);
                        Elements q = new Elements();
                        //开始生成表达式
                        if (c == 0) {
                            num.getNum();
                            q.add();
                            result += num.toString() + q;
                            count1++;
                        }
                        if (c == 1) {
                            num.getNum();
                            q.sub();
                            result += num.toString() + q;
                            count1++;
                        }
                        if (c == 2) {
                            num.getNum();
                            q.mul();
                            result += num.toString() + q;
                            count2++;
                        }
                        if (c == 3) {
                            num.getNum();
                            q.div();
                            result += num.toString() + q;
                            count2++;
                        }

    通过0,1,2,3来选择加减乘除

    public List<String> work(String str){
            List<String> list = new ArrayList<String>();
            char c;
            StringBuilder sb = new StringBuilder();
            for(int i=0;i<str.length();i++){
                c = str.charAt(i);
                if(isDigit(c)){
                    sb.append(c);
    
                }
                if(isOp(c)){
                    if(sb.toString().length()>0){
                        list.add(sb.toString());
                        sb.delete(0, sb.toString().length());
                    }
                    list.add(c+"");
                }
            }
            if(sb.toString().length()>0){
                list.add(sb.toString());
                sb.delete(0, sb.toString().length());
            }
            return list;
        }
        public void printList(List<String> list){
            for(String o:list){
                System.out.print(o+" ");
            }
        }

    将生成的表达式数字与符号分别存入数组与栈中

       if(s.equals("+")){
                        double a1 = (double) stack.pop();
                        double a2 = (double) stack.pop();
                        double v = a2+a1;
                        stack.push(v);
                    }else if(s.equals("-")){
                        double  a1 = (double) stack.pop();
                        double  a2 = (double) stack.pop();
                        double v = a2-a1;
                        stack.push(v);
                    }else if(s.equals("*")){
                        double a1 = (double) stack.pop();
                        double a2 = (double) stack.pop();
                        double v = a2*a1;
                        stack.push(v);
                    }else if(s.equals("/")||s.equals("÷")){
                        double a1 = (double) stack.pop();
                        double a2 = (double) stack.pop();
                        double v = a2/a1;
                        stack.push(v);

    表达式的计算,包含了优先级的选择,以及栈操作使得计算得以使用。

    项目链接

    小组结对博客

    于欣月同学

    余坤澎

    代码贡献度

    余坤澎 于欣月 康皓越
    个人贡献度 30% 40% 30%

    遇到的困难及解决方法

    1. 运算符的生成问题,一开始时打算使用随机数来表示输出,但是后续的括号无法进行合并,遂放弃。解决方法:将所有符号改为单个方法,例如,加方法只有加号。而值得说的是括号方法有两个,一个左一个右。
    2. 表达式类中的第三等级,因为同样是使用随机数来决定各个加减乘除运算的位置以及个数,但是会出现只有加减或者只有乘除的情况。解决方法:运用一个int型的count变量来监控加减或乘除,如果没有,自动生成相应的缺失运算。
    3. 优先级的问题,是继续在element方法中定义还是怎样?解决方法:直接在cal中计算前,也就是进栈时,规定谁优先。

    文件扩展

    1. 判断正确率
    2. 将生成的题目用IO流输入一个文件,生成一个题库

    转载于:https://www.cnblogs.com/326477465-a/p/9011498.html

  • 相关阅读:
    十天冲刺之一
    每日日报2021 4/30
    每日日报2021 4/29
    每日日报2021 4/28
    每日日报2021 4/27
    每日日报2021 4/26
    每日日报2021 4/24
    每日日报2021 4/23
    《梦断代码》读后感
    273. Integer to English Words
  • 原文地址:https://www.cnblogs.com/twodog/p/12136940.html
Copyright © 2011-2022 走看看