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


    一.结对对象

    二.本周内容

    (一)继续编写上周未完成代码

    1.本周继续编写代码,使代码支持分数类计算
    2.相关过程截图
    a.下图是上周编写的生成题目的类,不能运行。

    下图是本周更新的代码,可以支持分数的产生,红色框内为主要更改区域

    b.下图是代码中题目转后缀表达式的部分代码及运行结果截图

    c.下图是代码中后缀表达式计算结果的部分代码及运行结果截图

    3.关键代码解释
    在题目中生成真分数及包含真分数的题目转换为后缀表达式

    • 生成真分数:这里我们让产生的随机数含有复数,举例,我们产生-49之间的随机数,如果产生随机数为负数,就将一个随机产生的真分数赋给一个String型的figure,如果产生的随机数为09,则将此随机数转换为String型的赋给figure,这样就完成了真分数的生成在题目中。
    • 含真分数的题目转后缀表达式:我们调用StringTokenizer类中的方法,将上面的题目转换为StringTokenizer类的一个对象,然后使用nextToken()方法,将其分为String的字符串,然后判断字符串的长度,如果字符串长度大于1,就将字符串直接输出,然后下面就是字符串为1的,包括整数和操作符,这个在上周已经解决,包括入栈出栈,都已解决。
    • 后缀表达式求值:正在编写中:将所有的数都转换为分数,然后调用之前编写类中的分数的加减乘除方法,然后完成求值,正在编写中。

    (二)遇到的困难及解决方法

    (三)全部代码

    第一部分:生成题目 //负责人:侯泽洋

    import java.util.Stack;
    import java.util.Random;
    import java.util.ArrayList;
    import java.util.Scanner;
    
    class Questions {
        ArrayList<Object> array = new ArrayList<Object>();
        Random generator = new Random();
        char[] newchar = {'+', '-', '*', '/'};
        protected int number;
        int NUM;
    
        public Questions() {
            number = 0;
        }
    
        public Object getQuestion(int num) {
            int num1 = num;
    
            while (num > 0) {
                int figure = (int) generator.nextInt(9) + 1;
                array.add(figure);
                number = (int) (Math.random() * 4);
                array.add(newchar[number]);
                num--;
            }
            String obj = "";
            while (num < 2 * num1) {
                obj += array.get(num);
                num++;
            }
            int other = (int) generator.nextInt(9) + 1;
            array.add(other);
            obj += other + "=";
    
            return obj;
        }
    }
    

    第二部分:题目运算 //负责人:周亚杰,侯泽洋

    //生成后缀表达式
    
    public class Calculations {
        public static void main(String[] args) {
            Questions questions=new Questions();
            Stack stack = new Stack();
    
            Scanner Scan=new Scanner(System.in);
    
            char c;
            int count=0,answer;
            char[] operation = new char[100];
            String str = (String) questions.getQuestion(3);
    
            System.out.println("请回答以下问题:
    "+str);
            System.out.println("请输入你的答案:");
            answer=Scan.nextInt();
    
            for (int i = 0; i < str.length(); i++) {
                c = str.charAt(i);
                if (c >= '0' && c <= '9') {
    
                    operation[i] = c;
                    count++;
    
                   }
                else {
    
                    if (c == '*' || c == '/') {
                        if (stack.empty()) {
                            stack.push((char) c);
                        } else if ((char) stack.peek() == '*' || (char) stack.peek() == '/') {
                            operation[i] = (char) stack.pop();
                            stack.push(c);
                        } else
                            stack.push(c);
                    } else if (c == '+' || c == '-') {
                        if (stack.empty()) {
                            stack.push(c);
                        } else if ((char) stack.peek() == '+' || (char) stack.peek() == '-') {
                            operation[i] = (char) stack.pop();
                            stack.push(c);
                        } else {
                            operation[i] = (char) stack.pop();
                            stack.push(c);
                        }
    
                    } else
                        stack.push(c);
    
                }
            }
            int num = stack.size();
            for (int a = 0; a < num; a++) {
                operation[str.length() + a] = (char) stack.pop();
            }
    
    //后缀表达式计算    //负责人:周亚杰
    
    Stack<Integer> stack1 = new Stack<Integer>();
    
        int m, n, sum,num1=str.length()+(str.length()-count);
    
            for (int b = 0; b <= num1; b++) {
            if (operation[b] >= '0' && operation[b] <= '9')
                stack1.push((int) operation[b]-48);
            else {
                if (operation[b] == '+') {
                    m =  stack1.pop();
                    n =  stack1.pop();
                    sum = n + m;
                    stack1.push(sum);
                } else if (operation[b] == '-') {
                    m = stack1.pop();
                    n = stack1.pop();
                    sum = n- m;
                    stack1.push(sum);
                } else if (operation[b] == '*') {
                    m = stack1.pop();
                    n = stack1.pop();
                    sum = n * m;
                    stack1.push(sum);
                } else if (operation[b] == '/') {
                    m =  stack1.pop();
                    n =  stack1.pop();
                    sum = n / m;
                    stack1.push(sum);
                }
                else if (operation[b] == ' ')
                    continue;
            }
        }
            if ((int)stack1.peek()==answer)
                System.out.println("恭喜你答对了!");
            else
                System.out.println("很遗憾,答错了!答案是:"+stack1.peek());
    }
    }
    

    三.贡献度划分

    侯泽洋:50%
    周亚杰:50%

    四.结对照片

    五.评价及感想

    本周完成的力度并不是很大,感觉和其他小组有些差距,这个周末要多抽时间追上其他小组进度,下周二完成整个项目的编写。

    20172302 侯泽洋
  • 相关阅读:
    WCF 第二章 契约 异步访问服务操作
    WCF 第一章 基础 在IIS中寄宿服务
    哈希表 解释 和 实现
    ACM2010省赛总结
    hashTable实现
    c# winform 应用编程代码总结 14
    徽文化让世博更多彩
    c# winform 应用编程代码总结 15
    Socket用法详解
    IE插件技术 BHO C# IE 插件
  • 原文地址:https://www.cnblogs.com/hzy0628/p/9011379.html
Copyright © 2020-2023  润新知