王彪 2016-2017-2 《程序設計與數據結構》第5周學習總結
教材學習內容總結
- 1.關鍵概念
- 1.面向對象程序設計的核心是類的定義,它代表了狀態和行為的對象。
- 2.變量的作用域依賴於變量聲明的位置,作用域決定在哪里可以使用變量。
- 3.對象應該是封裝的,以防對數據的不適合訪問。
- 4.方法的返回值類型應該與方法頭中規定的返回值類型一致。
- 5.構造方法不能有任何的返回值,即使是void也不行。
- .......
-
2.類定義的結構和內容,類之間的關系,構造方法的目的結構。
-
3.類的基本編寫方式
教材學習中的問題和解決過程
- 問題1:程序5.11的理解問題
問題描述:程序5.11是學到現在書中出現的代碼量最多的程序,RationalNumber類包含了對有理數的各種操作,包括乘法和除法。這對結對編程項目-四則運算很有幫助。
解決途徑:
public RationalNumber (int number ,int denom)
{
if (denom == 0)
denom =1;
if (denom < 0)
{
number = number * -1;
denom = denom * -1;
}
numerator = number;
denominator = denom;
reduce ();
}
- 1.運用構造函數,if條件語句,巧妙的欲先處理了分數分母為零及為負數的情況,並將值賦給成員變量,最后調用私有方法reduce.
private void reduce ()
{
if (numerator != 0)
{
int common = gcd (Math.abs(numerator),denominator);
numerator = numerator / common;
denominator = denominator / common;
}
}
//--------------------------------------------------
// Computes and return the greatest commom divisor of the two
//--------------------------------------------------
private int gcd (int num1,int num2)
{
while (num1 != num2)
if (num1 > num2)
num1 = num1 - num2;
else
num2 = num2 - num1;
return num1;
}
}
- 2.reduce方法引用了gcd方法,這是利用逐差法求分數的最大公約數,並化簡為最簡形式。
public RationalNumber multiply (RationalNumber op2)
{
int numer = numerator * op2.getNumerator();
int denom = denominator * op2.getDenominator();
//int numerator2 = op2.getNumerator() * denominator;
//int difference = numerator1 - numerator2;
//return new RationalNumber (difference, commomDenominator);
return new RationalNumber (numer , denom);
}
public RationalNumber divide (RationalNumber op2)
{
return multiply (op2.reciprocal());
}
- 3.有關除法運算,首先調用reciprocal方法將分子分母調換便於計算,再引用multiply方法,而multiply間接調用reduce來化簡。
- 問題2:關於toString方法
詳述:在第七章中就見到過toSting方法,在第五章中出現多次,於是仔細了解了一番
在將對象傳遞給print或println方法時,以及將一個對象與一個字符串鏈接是,都會自動調用對象的toString方法。
代碼調試中的問題和解決過程
-
問題1:誤在構造方法中打入return.
解決過程:構造方法沒有返回類型(甚至沒有void),所以它不能返回任何值。
補充:對返回值的概念有點模糊,論壇,里面有很形象的比喻- 1.為什么要用到返回值呢?比如說你想要開門,可以將返回值比作一把鑰匙,你就可以開門,沒有return就不能開門
- 2.返回值就像你工作辭職的時候 你得遞交辭職信 但是老板看不看就不知道了
代碼托管
上周考試錯題總結
-
An array cannot hold object types.(數組中不能包含對象類型)(錯誤)
數組可以保存任何的基本類型或任何對象類型。保存在數組中的值有時稱為數組元素,保存的值的類型稱為數組的元素類型。 -
Which of the statements is true about the following code snippet?(對於下面的代碼段,說法正確的是?)
int[] array = new int[25]; array[25] = 2;
This code will result in a run-time error. (代碼會產生運行時錯誤)
在Java中許多運行時錯誤稱為異常exception,編譯程序進行檢查,知識查看是否有語法錯誤。 -
An infinite loop is not a compile-time error.(無限循環不會產生編譯時錯誤)
無限循環的語法無錯誤。 -
A while statement always executes its loop body at least once.(while語句的循環體至少會執行一次)
while循環在布爾表達式為真是重復執行指定的語句。首先要計算表達式的值,所以有可能一次都不執行對應的語句。 -
The ___________________ statement causes execution of a loop to stop, and the statement following the loop to be subsequently executed.(_________ 語句會導致退出循環,然后順序執行循環后面的語句)
break語句對循環的影響類似在switch語句中,即終止循環的執行,轉去執行循環之后的語句,continue語句類似break,但會再次計算循環條件,如果仍為真,則再次執行循環體。
結對及互評
- 上周博客互評情況
- 20162327王旌含
- 四則運算深度思考學習,在上周基礎上根據本周內容優化代碼(上周的思路很幼稚,還有待改進)
- 上周博客互評情況
其他(感悟、思考等,可選)
這章的學習並配合視頻的學習讓我對對象和類的概念有了很好的理解,第七章的不解也有所改變,類的學習,讓我在結對編程項目中有了更好的思路,現在回想起當時的...感覺就在菜雞互啄,很尷尬,雖然現在看來當時有點搞笑,但也很佩服自己,至少能想到是不?
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 070/200 | 1/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 30/38 | |
第三周 | 620/1000 | 3/7 | 51/60 | |
第四周 | 1200/200 | 5/9 | 80/90 | |
第五周 | 1500/500 | 6/11 | 00/120 | |
第六周 | 000/1000 | 0/11 | 00/120 | |
第七周 | 000/1300 | 0/13 | 00/120 |
嘗試一下記錄「計划學習時間」和「實際學習時間」,到期末看看能不能改進自己的計划能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
-
計划學習時間:XX小時
-
實際學習時間:XX小時
-
改進情況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)