20172302『Java程序設計』課程 結對編程練習_四則運算第二週階段總結

一.結對對象

二.本週內容

(一)繼續編寫上週未完成代碼

1.本週繼續編寫代碼,使代碼支持分數類計算
2.相關過程截圖
a.下圖是上週編寫的生成題目的類,不能運行。

下圖是本週更新的代碼,能夠支持分數的產生,紅色框內爲主要更改區域
html

b.下圖是代碼中題目轉後綴表達式的部分代碼及運行結果截圖
java

c.下圖是代碼中後綴表達式計算結果的部分代碼及運行結果截圖
dom

3.關鍵代碼解釋
在題目中生成真分數及包含真分數的題目轉換爲後綴表達式code

  • 生成真分數:這裏咱們讓產生的隨機數含有複數,舉例,咱們產生-4~9之間的隨機數,若是產生隨機數爲負數,就將一個隨機產生的真分數賦給一個String型的figure,若是產生的隨機數爲0~9,則將此隨機數轉換爲String型的賦給figure,這樣就完成了真分數的生成在題目中。
  • 含真分數的題目轉後綴表達式:咱們調用StringTokenizer類中的方法,將上面的題目轉換爲StringTokenizer類的一個對象,而後使用nextToken()方法,將其分爲String的字符串,而後判斷字符串的長度,若是字符串長度大於1,就將字符串直接輸出,而後下面就是字符串爲1的,包括整數和操做符,這個在上週已經解決,包括入棧出棧,都已解決。
  • 後綴表達式求值:正在編寫中:將全部的數都轉換爲分數,而後調用以前編寫類中的分數的加減乘除方法,而後完成求值,正在編寫中。

(二)遇到的困難及解決方法

htm

(三)所有代碼

第一部分:生成題目 //負責人:侯澤洋對象

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;
    }
}

第二部分:題目運算 //負責人:周亞傑,侯澤洋blog

//生成後綴表達式

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("請回答如下問題:\n"+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%字符串

四.結對照片

五.評價及感想

本週完成的力度並非很大,感受和其餘小組有些差距,這個週末要多抽時間追上其餘小組進度,下週二完成整個項目的編寫。get

相關文章
相關標籤/搜索