#20175310 《Java程序設計》第6周學習總結 本週博客: 《20175310 類定義 - 20175310xcy - 博客園 》https://www.cnblogs.com/xicyannn/p/10653168.html 《20175310結對編程項目-四則運算 階段總結博客 - 20175310xcy - 博客園 》https://www.cnblogs.com/xicyannn/p/10634482.htmlhtml
教材學習內容總結
這周學習了第七章和第十章,主要內容以下: 第七章: 1.學習了類的另外一個成員:內部類,包含內部類的類叫內部類的外嵌類。 2.內部類和外嵌類的關係: ①外嵌類的成員變量在內部類中仍然有效,內部類的方法也可調用外嵌類的方法 ②內部類不能夠聲明變量和類方法,外嵌類能夠用內部類聲明對象以做爲外嵌類成員 ③內部類僅供他的外嵌類使用 3.外嵌類的成員變量在內部類中仍然有效,使得內部類和外嵌類的交互更加方便git
第十章: 程序在運行期間,可能須要從外部的存儲媒介或其餘程序中讀入所須要的數據,這就須要使用輸入流。輸入流的指向稱爲它的源,程序經過輸入流讀取源中的數據。另外一方面,程序在處理數據後,可能須要將處理的結果寫入到永久的存儲媒介中或傳送給其餘的應用程序,這就須要使用輸出流。輸出流的指向稱爲它的目的地,程序經過輸出流把數據傳送到目的地。雖然IO流常常與磁盤文件存取有關,可是源和目的地也能夠是鍵盤、內存或顯示器窗口。編程
教材學習中的問題和解決過程
-
問題1: 書上319頁第十章課後習題回答錯誤
dom
-
問題1解決方案: 根據答案提示,這裏應用到了10.3的知識點,應該用
FileOutputStream
類實現文件字節輸出流。學習
代碼調試中的問題和解決過程
- 問題2: 在完成結對項目時遇到了問題,表達式是一個數字一個運算符獨立輸出的,所以在系統看來表達式並非一個總體
- 問題2解決方案: 經過字符串拼接的方式將生成的隨機數和運算符讀取到字符串
Question
中:
String Question = new String(""); //系統隨機生成的表達式
for (int j=1;j<=a+1;j++) { int b = random.nextInt(10) ; //生成0到9之間的隨機數b,表示表達式中出現的隨機數,共a+1個 System.out.print(b); //將生成的隨機數輸出 if (j <= a) { fuhao k = new fuhao(); //聲明類fuhao的對象k char q = k.yunsuanfu(); //產生一個運算符q System.out.print(q); //將生成的隨機符號輸出 Question = Question + b +q; //將生成的隨機數和隨機符號存入Question中 } else{ Question = Question + b; //將生成的隨機數存入Question中 } }
- 問題3: 在完成類定義做業時,不會覆蓋
equals
方法 - 問題3解決方案:
equals
方法的重寫以前沒有學過,書上的和以前作的練習主要都是講怎麼用equals
方法,對於怎麼重寫沒有提到。我在網上參考了《重寫equals方法》這篇博客,完成了這部分的代碼:
public boolean equals(Object obj) { //覆蓋了父類Object中的equlas方法。 if (this == obj) //判斷是否爲同一對象 return true; if (obj == null ) //判斷是否爲空 return false; if (getClass() != obj.getClass()) //判斷是否屬於同一個類 return false; Book book = (Book) obj; ////若是類型相同,比較內容 if (bookName == null) { if (book.bookName != null) return false; } else if (!bookName.equals(book.bookName)) return false; if (author == null) { if (book.author != null) return false; } else if (!author.equals(book.author)) return false; if (press == null) { if (book.press != null) return false; } else if (!press.equals(book.press)) return false; if (pubDate == null) { if (book.pubDate != null) return false; } else if (!pubDate.equals(book.pubDate)) return false; return true; } public int hashCode() { //重寫hashcode final int prime = 31; int result = 1; result = prime * result + ((bookName == null) ? 0 : bookName.hashCode()); result = prime * result + ((author == null) ? 0 : author.hashCode()); result = prime * result + ((press == null) ? 0 : press.hashCode()); result = prime * result + ((pubDate == null) ? 0 : pubDate.hashCode()); return result; }
這裏須要注意的一點是:在這篇博客裏,做者有提到重寫equals
方法必定要重寫hashcode
方法。由於散列碼(hashcode)是由對象導出的一個整數值,它是沒有規律的。每一個對象基本上對應惟一的一個散列碼。所以重寫equals
與hashcode
定義必須一致:若是a.equals(b)
返回true
,那麼a.hashcode()
和b.hashcode()
必須具備相同的值。this
代碼託管
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 6/6 | 2/2 | 30/30 | |
第二週 | 625/631 | 3/5 | 35/65 | |
第三週 | 660/1291 | 2/7 | 38/103 | |
第四周 | 972/2263 | 2/9 | 30/133 | |
第五週 | 399/2662 | 3/12 | 32/165 | |
第六週 | 1342/4004 | 3/15 | 35/200 |