王彪20162321 2016-2017-2 《程序設計與數據結構》第4周學習總結


1.需求分析

  • 根據輸入的題目數能自動打印出同數目的題目
  • 在每次答題后可以顯示是否正確
  • 錯誤的答題可以顯示正確答案
  • 答題后顯示正確數目數
  • 結束是詢問是否再來一次

2.設計思路

  • 如何解決能讓程序自動輸出數學題目的問題

1.首先我們假定一個數學運算:A + B = C,在此運算中C是由用戶輸入的,而A , B ,“+”,則應該是由計算機生成的。

根據上述,我們想到了Random類(第3章),隨機產生數字A 和 B,這是我們開始糾結“+”,是不是也讓其隨機產生(+ , * , /),討論之后決定擱置,因為技術不夠決定作為項目外的擴展。

2.由於放棄了隨機產生運算符的“荒唐”想法,我們換了一種思路,能否先確定幾種運算規則如:A + B = ;A * B = ;A / B =,讓后在由系統隨機選取其中一種。

對此我們想到了switch語句(第4章),幾種規則的運算就相當於switch分支,每條分支代表一種運算。

3.確定使用switch語句后,我們就得確定switch語句首先得計算的表達式,表達式的值等於運算規則數,不宜過多4~6個。

於是我們再次運用Random類int num = in.nextInt(6),所以隨機產生的0~5六個數都有相應的語句匹配。

4.輸出題目的問題解決后,打印出用戶想要的題目數量,我們決定使用Do語句

首先int num1 = in.nextInt讀入用戶輸入的數字,然后使用do(int num2 = 0;num 2 < num1;num2++)

  • 解決了產生數學問題的主要問題后,其余要求便十分簡單了
    1.解決答題后顯示正確與否,並顯示正確答案

我們使用 if-else語句,在switch語句中每個分支,我們加入如下“語句”

首先要讓計算機計算我們所隨機產生的數學題目,讓后比較用戶輸入是否結果等於正確值,在判斷該輸出何種語句

例如:
if ( D /用戶輸入/ == A + B)
System.out.println ("true");
sum = sum + 1;
else
{ System.out.println ("Wrong")
int num3 = A + B; System.out.println ("right answer:" + num3);
}
同時在每個分支中加入sum = sum + 1 sum表示作對的題目數,只要在最后打印出sum的值就可。

2.做題結束是詢問是否在來一次。

在整個do語句上加入while語句,使用標記值來確定是否退出,如PP4.8.

  • 這是我們此次的思路簡圖:

3.實現過程中的關鍵代碼解釋

  • 這次實驗所用的所有代碼都來自第3,4章的內容:

//進行X次循環,X為用戶所要求的題目數,於此產生X道題目
for (int i = 0; i < X; i++)

//產生一種運算
switch (num3)
{
case 0:
int a,b;
a = in.nextInt(21) - 10;
b = in.nextInt(21) - 10;
System.out.println (a + "+"+ b+ "=" +"?");
int d = out.nextInt();
if (d == a + b)
{System.out.println ("true");
sum = sum + 1;
}
else
System.out.println ("wrong");
break;
.......
}

//整體看
while (...)
{
do(...)
{
switch(..)
{
if(...)
}
}
}

4.遇到的困難及解決方法

  • 當我們解決了自動生成數學題目的問題后,以為一切都輕松了,但沒想到測試時才發現最難得是分數運算的問題,比如: 2/3+4/5=?但程序打出這個題目時,我們輸入22/15時,程序顯示wrong,因為這是2/3=0,4/5=0,這就很尷尬了。於是我們上網查了查發現計算機中沒有分數····,這就有點不明白謝老師什么意思了?,由於這項任務是分給了王旌含,所以他在博問上提了出來關於分數的計算問題;最大公約數求解; Daniel Cai 給了我們一個小小的思路,將分子分母分開計算,(好吧,后面的求最大公約數的問題確實沒弄懂,有些語句還沒了解),然后,我們兩個又卡住了,因為用戶在計算輸入時是要肯定輸入:22/15,那要怎樣才能讓計算機比較輸入數與計算結果是否相等呢?難道要將輸入的結果與計算結果分子分母拆開來一個個比較嗎?想到這,我們又有了一個思路(做中學嘛),我們將用戶輸入不用(int)而用(string),因為我們想到了書中的程序4.8檢查一個字符串是否是回文時,他將字符串的第一和最后一個逐個對比left = 0; right = str.length() - 1; while(str.charAt(left) == str.charAt(right) && left < right)於是我們抓住這一點:
    【1】首先我們將分子 = N,分母 = M, String wb = new String(n+"/"+m);然后定義一個wb,保險起見,我們先charAt和length,發現wb 如我們所想那樣為:22/15
    【2】然后我們string wc = out.nextLine();;一開始我們這樣想的```System.out.println(wc == wb);但結果顯示為false,為什么?這么煩?我們又想到了婁老師和謝老師給的鏈接調度場算法提到的“棧”“堆”的概念,總之我們覺得他們不等就對了,所以才誕生將這兩個字符串逐個字符比較的想法。
    【3】while (wb.charAt(left) == wc.charAt(left) && left < right)
    {
    left++;
    }
    if (left == right)
    System.out.println ("true");
    【4】就這樣我們轉變了分數的比較方法,不比較大小,轉而比較字符。
    【5】於是我們先寫了個小程序試驗了一下

    運行之后為

    【6】將其植入進去運行了下又發現問題了

    【7】所以現將老版本貼出來.......(不全)

《程序設計與數據結構》第4周學習總結

教材學習內容總結

  • 第四章:學會使用if-else語句,switch語句,while語句,do語句,for語句

  • 第七章:主要學習定義使用數組和關於命令行參數的知識

教材學習中的問題和解決過程

  • 1.問題:程序4.2中出現的各種不解
    詳述:1.首先4.2程序的總體思路是將用戶輸入的字符串,按照從中間聚攏的方式依次判斷字符是否“==”。
    2.關於left = 0,right = str.length(),應該是字符串字符的排序是從0開始的吧,這就有點像數組索引是從0開始的一般吧。

  • 2.問題:程序7.5的問題
    詳述:張師瑜的問題

代碼調試中的問題和解決過程

  • 1.PP4.8中要求使用標記值來決定用戶是否想要退出,於是想到了程序4.8while (another.equalsIqnoreCase("Y"))
    但是依據4.8的內容,但最后運行的時候卻直接跳過了輸入的一步,致使程序結束並未進行循環。
    所以,我更改了while中的條件

    后來很多同學都出先相同問題博問

代碼托管

  • 代碼量截圖:

上周考試錯題總結

  • 1.Linux Bash中,查找當前目錄中前天創建的Java文件的命令是(find . -name *.java -ctime 2)
    總結: 對於find命令不夠熟悉,實驗樓中介紹了find,它不但可以通過文件類型、文件名進行查找而且可以根據文件的屬性(如文件的時間戳,文件的權限等)進行搜索。
    find 命令的路徑是作為第一個參數的, 基本命令格式為 find [path] [option] [action]

-mtime n: n 為數字,表示為在n天之前的”一天之內“修改過的文件
-mtime +n: 列出在n天之前(不包含n天本身)被修改過的文件
-mtime -n: 列出在n天之內(包含n天本身)被修改過的文件
newer file: file為一個已存在的文件,列出比file還要新的文件名

  • 2.使用JDB進行調試時查看源代碼的命令是(list)
    總結: JDB調試應用不過關,老師的博客

結對及互評

點評模板
和我一小組的是王旌含,這次咋們一起研究了四則運算,雖然最后還是有點問題,很尷尬,但已經有了小默契,能很好分工,但還得繼續努力。

點評過的同學博客和代碼

其他(感悟、思考等,可選)

這周學習難度突然有點大了,但跟着自己的節奏來倒也學的不慌不亂,有所收獲。保證每天都有一個小時以上看書實驗的時間。
謝老師的結對編程項目,給了我和王旌含一個挑戰,特別是分數,簡直弄瘋了,博客園中的博問提了又提....
有時候換個角度思考,柳暗花明又一村。
有時候沒有困不困難,只有想不想做,你做了,可以說難,沒做的人也可以說困難,但關鍵看自己是否有收獲,但····真的有點難了···
班上一些同學很努力,能力很強,得向他們學習。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 070/200 1/2 20/20
第二周 300/500 2/4 30/38
第三周 620/1000 3/7 51/60
第四周 1200/1300 4/9 78/90

參考:軟件工程軟件的估計為什么這么難軟件工程 估計方法

  • 計划學習時間:XX小時

  • 實際學習時間:XX小時

  • 改進情況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM