1. 程式人生 > >20172305 2017-2018-2 《程序設計與數據結構》第三周學習總結

20172305 2017-2018-2 《程序設計與數據結構》第三周學習總結

href soci ref 由於 代碼執行 math類 art 對象 string類型

20172305 2017-2018-2 《程序設計與數據結構》第三周學習總結

教材學習內容總結

本周內容主要為書的3.1-3.8的內容:
1.String類、Random類、Math類、兩種格式化輸出NumberFormat類和DecimalFormat類、枚舉型以及包裝器類
2.Java API標準類庫
3.import聲明簡化類的引用
4.對象變量保存的是該對象的地址

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

  • 問題1:對於Random類中輸出隨機數的取值範圍
  • 問題1解決方案:選取的範圍通常為左閉右開,而且左區間的值為0或者0.0,而整型的右側一般為取到的最大值的減1,而浮點型的右側為1,只能輸出(0.0,1.0)之間的範圍,如果是取其他的範圍,只能通過乘法的擴大倍數或者是加減移動範圍。
  • 問題2: Math類的正余弦值的運算
  • 問題2解決方案:對於書上所說的“static double cos(double angle)”中的angle是弧度值,而我在進行PP3_8的實驗做出來的隨機數的正余弦,與我手機計算器運算的數有很大差別,而且整個程序沒有問題。耗時半天進行解決,反復調試,才發現自己的代碼執行的是弧度值,手機執行的是角度值,針對角度值的運算只能通過弧度制與角度值的換算公式1=180度/π進行運算。
  • 問題3:Math中的各種方法
  • 問題3的解決辦法:Math.PI為圓的周長與直徑之比,即為π,無限不循環小數,比自己用3.14要精確多了,Math.log是運算對數函數的,JDK API對於自己查詢方法有很大的的幫助。
    技術分享圖片
    技術分享圖片

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

  • 問題1:格式化輸出中NumberFormat類和DecimalFormat類
  • 問題1解決方案:(1)針對NumberFormat類的例題3.4書中的輸出是美元符而不是人民幣的符號,而自己輸出的是人民幣符號,這個是如何區分本地的問題,很有意思。我認應該是當初設置系統的時候選擇了上海的地區,所以分為了人民幣。
    (2)針對DecimalFormat類的“#”和“0”的區別,試了好幾次,並且每次運用的“#”和“0”的長度也不同,其中“#”的作用表示該位無數字則自動省略,“0”表示該位無數字則補零。兩種都要進行四舍五入,進行保留。而且書中的例題很有意思,其中的“The circle‘s area:78.5398”在格式化為“0.####”如果為“0.###”的時候,8進位,9變10結果應該為78.530,但由於“#”的作用使得末尾的0去掉了。

    技術分享圖片

  • 問題2:對於import聲明類的過程,對於多種類的聲明方法
  • 問題2解決方案:針對同種包中的類可以用“*”全部代替。
  • 問題3:char類型與String類型的轉換
  • 問題3解決方案:char和String的區別:

    (1)類型不同,char是字符類型, String是字符串類型(2)String字符串是用""來包含串的, char是用‘‘來包含單字符的(3)String內部用來存儲的結果是一個char字符數組。
    我所敲的代碼忽略了字符與字符串的問題,所以出現問題提示,用強制轉換的方式可以解決,String s = String.valueOf(‘c‘)。
    技術分享圖片

代碼托管

技術分享圖片

上周考試錯題總結

  • 錯題1What value will z have if we execute the following assignment statement? float z = 5 / 10; (如果我們執行下面的賦值語句,得到的z將會是什麽值?)z will equal 0.0 (z將等於0.0)
  • 錯誤分析: 這道題完全就是選錯選項造成的,兩個整型數做除法仍為整型數,在由該整型數變為浮點數。
  • 錯題2.Which of the following is true regarding the mod operator, %? (關於求余運算符%,下面哪項是正確的?)It can be performed on any numeric values, and the result always is numeric (它可以執行任何類型的數值,其結果始終是數值)
  • 錯誤分析: 做此題之前,一直認為求余運算只能是整型的,通過此題認識到執行任何類型的數值都是可以的。這道題算是自己學習缺陷的彌補,下次看書的時候會更認真。
  • 錯題3. What is output with the statement System.out.println(x+y); if x and y are int values where x=10 and y=5? (如果x和y是int類型的數值,x=10,y=5,那麽語句System.out.println(x+y);的輸出是什麽?)15
  • 錯誤分析: 混淆字符串和數字的區別了,對於兩側加雙引號狀態下數字成為字符串,在未加狀態下,括號將“+”運算符與兩個數值操作對象組織在一起,則首先進行加法運算的,然後在輸出。
  • 錯題4. If you want to store into the String name the value "George Bush", you would do which statement? (如果你想把"George Bush"這個值存儲為字符串類型的名字,你會執行那條語句?)
    String name = "George Bush";
    String name = new String("George Bush");
    String name = "George" + " " + "Bush";
    String name = new String("George" + " " + "Bush");
  • 錯誤分析: 有兩種方法可以將字符串存儲為字符串變量,通過使用“new string (string value)”構造一個新字符串,或者使用賦值語句。因此前兩個是對的,而後兩個用上使用了字符串連接操作符“+”也是對的。該題一直不確定選哪個,是由於自己沒有提前看書造成的,因此好好看書成為重中之重,而且要確定好每個選項,不能因為一個“E”選項影響。
  • 錯題5. Java is a strongly typed language. What is meant by "strongly typed"? (Java是一種強類型語言。“強類型”指的是什麽?)Every variable has a single type associated with it throughout its existence in the program, and the variable can only store values of that type (在程序中,每個變量都有一個與之關聯的類型,而變量只能存儲該類型的值)
  • 錯誤分析: 變量是自己定義類型的,但變量的存在期間,變量的類型不會發生變化,而存儲在該變量中的任何值都屬於該類型。強大的輸入是重要的,因為它保證了一個成功編譯的程序不會出現與被聲明的變量的錯誤類型相關聯的運行時錯誤。
  • 錯題6.A double is wider than a float and a float is wider than an int. (一個double類型的數比float類型的數更寬泛,一個float類型的數比一個int類型的數更寬泛。)true
  • 錯誤分析:double是64位,而float是32位,而float,因為它的存儲方式是浮點型的,可以存儲比int更大的值範圍。後半部分的內容是自己在做題是忘記考慮,選錯的。同位存儲類型的整型和浮點型,浮點型的存儲比整型的存儲大。
  • 錯題7.A variable of type boolean will store either a 0 or a 1. (Boolean類型的變量將被存儲為0或1)false
  • 錯誤分析: 布爾變量只能存儲兩個值中的一個,但這些值是保留字true和false。在C語言中,c++和c#布爾值被實現為只存儲0或1的int變量,但是在Java中,語言的作者選擇了真實和錯誤的布爾文字,因為這被認為是語義上更容易理解的(而且更安全)。由於上學期老師說過黑白圖片的存儲是由0和1的形式存儲的,就選錯了,實際上那種是C語言的存儲方式,而本題說的是JAVA語言。
  • 錯題8.Consider the following statement:
    System.out.println("1 big bad wolf\t8 the 3 little pigs\n4 dinner\r2night");
    This statement will output ________ lines of text (思考下面的語句,該語句將輸出___行文本)2
  • 錯題分析: \t轉義序列插入一個選項卡,但將光標放在同一行。\n的轉義序列導致產生一個新行,以便“4晚餐”在下一行輸出。轉義序列\r使回車返回(也就是說,光標移回到左邊緣),但是因為它沒有開始新的行,“2night”輸出超過“4 dinn”,導致第二行看起來像“2nighter”。
  • 本周的錯題相對簡單,總結起來自己的成績為何這麽低,原因在於自己沒有好好看書,沒有細致的看書上的重點句子造成的,同時自己學習進度也要提前,才能防止本次錯題中的失誤。在看書的同時也要多在網頁上進行相關知識的查找才能極大的拓寬我們的視野。

感悟

 本周在虛擬機上的敲代碼變得順利許多,無非就是自己的代碼有問題之類的錯誤出現,沒有以前的那些稀奇古怪的問題出現。但,本周運行的Idea倒是遇到了不少麻煩,幸得老師、學長和同學的幫助,才得以解決。像什麽與碼雲的連接問題,在Idea上把文件傳到碼雲上,還有更為無奈的是這個好像只有一個月的試用期,只能模仿同學,在淘寶上開了個帳號進行應用。還有本周一遇到了~~毀天滅地~~的大事,就是虛擬機在軟件更新過程中的失敗,造成虛擬機的壞掉圖形界面顯示不出來,一直處於無程序的界面(還不如直接黑屏來的幹脆,看著自己好不容易弄出來的虛擬機就是不運行,真想把電腦砸了)值能求助老師,在老師的幫助下,開始恢復圖形界面。但是,很不幸的是自己把語言模式設置成漢語,造成大部分的內容顯示不出來,用一個個的菱形替代,完全不知菱形背後的是什麽。快氣炸了,沒法解決只能自己重新安裝了,好在自己還有安裝步驟,花費了一節公選課的時間,重新裝完vmwaretools、gdk、vim、tree等東西,將近一個半小時的是間就搞定了,應了那個成語“熟能生巧”(為自己的錯誤買單)如果有下次的話,我相信指定會比這次安裝的更順利。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 136/200 1/2 15/20
第二周 570/500 1/4 20/38
第三周 613 /1000 1/7 23/60 習慣了,也就不感覺敲代碼很累了。

參考資料

  • 藍墨雲班課上的視頻

  • char和String的轉換

20172305 2017-2018-2 《程序設計與數據結構》第三周學習總結