2017-2018-20172309 『Java程序設計』課程 結對編程練習_四則運算_第二週

2017-2018-20172309 『Java程序設計』課程 結對編程練習_四則運算

組隊成員: 仇夏
學號: 20172310
結對照片:
博客地址:點擊這裏java

1.進度回顧:

  • 已完成:
    - 完成了生成中綴表達式的類。
    - 完成了main函數用來運行的類。
  • 待完成:
    - 中綴表達式轉化成後綴表達式的類
    - 後綴表達式的計算。
    - 去重。
    - 將生成的題目存到一個文件中。
    - 代碼的完善與美化。

2.項目介紹:

  • 這個程序要求用戶輸入所要生成問題的個數n(每一個算式的等級都是隨機的且最高級爲5級),以後每出來一個問題就要求用戶輸入他計算的獲得的答案。程序將自動計算出正確答案,並與用戶答案相比較,最後全部問題計算完後,電腦自動顯示全部正確答案與用戶答案,並給出正確率。

3.項目代碼連接:

4.關鍵代碼及解釋:

  • 關於生成分數
>      public class Fraction {
>      private int a,b;
>      private int num1;
>      private int num2;
>      private String result;
>      private int tem=1;//兩數最大公約數
>
>
>      public Fraction( )
>     {
>       getRandom();
>        while (num1==num2) {//當分子分母相同就一直使用getRandom()方法得到num1,num2直到num1!=num2。
>            getRandom();
>        }
>            a=Math.min(num1,num2);
>            b=Math.max(num1,num2);//讓a,b分別取較小值和較大值
>
>            tem=a;
>
>            while (tem>=1)
>            {
>                if (num1%tem==0&&num2%tem==0)
>                    break;
>
>                tem--;
>            }//獲得最大公約數
>
>          a=a/tem;
>           b=b/tem;
>            result=a+"/"+b;//獲得約分後的分數
>
>        }
>
>     private void getRandom(){
>        num1 = (int)(Math.random()*9+1);
>        num2 = (int)(Math.random()*9+1);
>      }//一個方法,讓num一、num2分別取1~9中的隨機數
>
>      public String getResult()
>      {
>        return result;
>          }
>      }
  • 中綴表達式轉化成後綴表達式:我的以爲有兩個難點:
  1. 關於創建一個座標,用以比較+、-、×、÷的比較級:1表示大於,-1表示小於

  2. 怎麼將座標系與操做符連立起來:
  • 關於後綴表達式的計算:
    這一步就是將後綴表達式中的操做數入棧,並化成RationalNumber類型,並遇到操做符就使用相對應的方法將該操做符前的兩個操做數進行計算。

5.遇到的問題及解釋:

  • 問題1:如何把用戶輸入的答案與正確答案存起來,在最後統一輸出以便比如較?
  • 問題1解決方法:對這一部分我是構建三個數組。以第一個用以存入用戶答案,第二個用以存入正確答案,第三個存入對錯狀況。如圖:
  • 問題2:爲何正確率始終爲零?
  • 問題2解決方法:出現這個問題的緣由是:
int count1=0,count;
   double accuracy;
   accuracy=count1/count;//更改之前
   accuracy=(double)count1/count;//更改之後
  • 問題3:如何用代碼實如今比較操做符優先級的時候與棧頂元素比較,直到遇到比他低的元素
  • 暫未解決!
  • 問題4:在生成分數的分子與分母的時候,若是出現分子分母相等,如何實現從新定義分子分母但不影響後面程序的運行呢?
  • 問題4解決方法:可使用一個循環語句,當分子分母相等時從新給分子分母取值,直到分子分母不等。

6.項目自評:

  • 這個項目的後期仍是挺有意思的,編出來了就很高興。但每每後續會發現會出現一些Bug,因此就要運用到之前的知識去解決它,在這個過程當中,每每可以複習到已經忘掉的東西。好比:switch語句、數組等。而且在解決問題的過程當中,會發現一些問題,通過思考後會出現多種思路,這既拓展了咱們的思路,還須要咱們取思考來選擇一個更簡便、更通俗易懂的方法。其次,這個項目出來的時候,仍是出現了一些與實際不符的問題,好比原先的操做數範圍咱們設置了爲1~99,分數最大可以爲98/99.後來算式出來的時候發如今實際生活中根本不可能出現這麼大的數字來叫咱們運算。那麼好玩的又出現了,既然操做數不須要太大,咱們能夠設置爲1~9,那麼在中綴轉後綴的時候咱們就沒必要先判斷是否爲操做符了(由於ASCII碼中沒有兩位數的操做數,所以只能先判斷是否爲操做符)。
    ·······

7.對好友的評價:

  • 隊友很勤快,也很努力。在上週變成的過程當中,由於我的緣由,99%的代碼都是她編的,這周她比較忙,因此我就比她多編了一點。在整個過程當中,咱們頗有默契的作到了誰有空就誰多作一點,我認爲這樣是很好的。最重要的是:在最後咱們完成了所要求的代碼編程。我的感受隊友在整個項目設計、編程中的做用是大於個人,所以給出如下評分:
  • 好友評分:
    - 20172309:40
    - 20172310:60
相關文章
相關標籤/搜索