20172308《程序設計與數據結構》第六週學習總結

20172308 2017-2018-2 《Java程序設計》第六週學習總結

教材學習內容總結

數組
1.保存元素個數預約義,數組是必須實例化的對象,聲明後大小不可變。
2.數組保存的能夠是基本數據類型,對象(包括本身編寫的),數組也能夠做爲參數
3.數組的參數能夠用方法變成可變長度參數,也能夠經過命令行輸入。
4.二維數組:int[][]html

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

  • 問題1:可變長度參數表。書上的作法是把他寫成一個方法,而後調用這個方法的時候,在參數裏能夠寫任意多個參數,而後存儲到數組裏面。然而我以爲這個方法是挺好的。不過在作後面習題的時候以爲有點不夠用了。有一題是要輸入一組整數而後求平均數與方差。對於我來講,讓我最困擾的是要輸入多少個數字是不肯定的。也就是說你要有一個辦法在你想要結束輸入數字的時候,結束,而後將輸入過的全部數字用於計算。我一開始的想法是:作一個嵌套循環,在你每一次輸入完數字後都會提醒你是否結束輸入,而後判斷是否繼續外面的循環或跳出循環。可是沒能實現(在下面的代碼調試中具體說明)。因而就想到了書上的命令行實參和可變長度參數表。第二個思路就是利用這兩個,在運行時的命令行後面直接加上數字。固然也沒那麼容易:命令行實參是程序對args數組的引用,寫法爲「args[索引]」。這就有個問題,你能輸入多少個數字是程序裏預先寫好的,能夠超出寫好的個數(保存在數組中,但程序會忽略)。那對於這個題就沒意義了。本覺得能夠結合可變長度參數表(真是完美的組合!),但其實是書上把他寫進方法裏,在驅動程序裏寫參數,而不是直接使用的,也嘗試了一下,不行。
  • 問題1解決方案:也就是對於這個題目,上述的第二種思路是解決不了的(個人嘗試是這樣的)java

  • 問題2:爲何數組的索引值從0開始?git

  • 問題2解決方案:百度。書上的解釋是,從計算方法上看,「訪問第一百個元素與第一個元素同樣簡單」。不過在我看來是「訪問第一個元素與第一百個同樣困難」。因而百度的一篇cenalulu的MySQL博客有較詳細的介紹:
    最重要的是「歷史緣由」,再有就是0的標號寫法能夠節省編譯時間,能夠更優雅的表示數組字串(不用+1什麼的,差1錯誤)編程

  • 問題3:書上的一道例題是要找出用戶輸入的字符串中的大小寫字母,並計算出出現次數數組

  • 問題3解決方案:經過分析和參考了其餘同窗的博客,理解這個例題的作法:
    首先這個程序是經過將字符和Unicode字符集對應相對字符的位置,還有循環,從而把大小寫的26字母打印出來的。而後用charAt把相應的字符拿出來,把它做爲數組的索引,出現一次,就加1,從而達到計數的目的。編程語言

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

  • 問題1:課後習題PP8.5。一開始的思路是如圖:

    首先是將輸入的數字付給num1,再把num1存在數組裏,固然也能夠直接存在數組裏,我這樣作是爲了測試會不會阻斷循環時的輸入(結果確實是的)。輸入完數字以後會接着要輸入y/n,這就是爲了做爲是否結束輸入的依據,便是否結束循環。按道理來講,若是我輸入的是「n」,也就是「judge==n」成立,應該接着循環,提示輸入數字纔對啊,然而事實是直接結束循環。oop

  • 問題1解決方案:我也嘗試了不一樣的語句,好比在循環裏面用判斷語句,或是再嵌套一個循環,結果都是隻能循環一次。如圖:

    這裏還有一個問題就是:一開始我聲明的對象只有scan一個,而後用他進行了兩次輸入,這是不行的(會直接結束,沒法輸入),要兩個對象,各自調用方法。
    【更新】通過我不懈的努力,最終讓程序的結果符合了預期:如圖

    所作的修改只有畫橫線一處,把原先的相等性運算符「==」改爲了方法equals,程序是正常運行了。但還有一個疑問就是,其實這兩個是等價的吧,爲何前面的那個不行呢?
    這裏還有一個要記錄的,數組的方法.length是數組的長度,而不是已經有了多少輸入保存進去的數據(害我平均數老是算不對)
    還有一個不完美的地方就是:依照題目的意思輸入的輸入的數不能超過50,這就致使了最後輸出數組中值的時候,會把沒輸的值所有是0輸出出來。學習

  • 問題2:課後習題8.1。首先最大的問題是,題目要求的是0~50內的任意多個整數,也就是說我要輸入一萬個值進去也行,然而數組容納的元素個數是定好的,總不能真寫一萬吧。最後打印的話豈不是要打印一萬個數字出來?並且問題是我沒法作到統計每一個數字出現的次數
  • 問題2解決方案:這個問題想了好久沒有想出來。最後參考了蔣子行同窗的代碼,不由感嘆蔣子行同窗真的是很厲害啊。原本是想參考一下有個思路,最後發現差很少是抄下來了,由於他寫的代碼真的簡潔,很厲害。代碼如圖:

    一開始個人作法是,一個一個的向索引處存值,而後就沒有而後了,由於真的不知道怎麼去統計。
    參考了蔣子行同窗的代碼(跟書上的例題同樣,不過當時的例題沒看懂,這下理解了):
    把輸入的值做爲數組的索引,每輸入一次就加一,這樣就解決了統計次數的問題。
    另一點就是用的continue語句,把數組內其它沒輸滿的數字(初始化爲0),去掉。這樣就達到了只打印出已輸入的數值出現狀況。測試

代碼託管

上週考試錯題總結

  • 錯題1:
    命令行

  • 錯題1解析:最內層的循環(在示例中是for循環)被破壞,而且在for循環結束後繼續執行。

  • 錯題2:

  • 錯題2解析:這適用於int、short、byte、long、char和boolean,而不是double或float變量。若是兩個雙變量x和y正在被測試,(x == y)只有當它們剛好等於最後一個小數點時纔是正確的。相反,比較這兩個值是很常見的,可是容許在值上有細微的差異。

  • 錯題3:

  • 錯題3解析:儘管應該避免使用continue語句,但若是可能的話,能夠在Java的三個循環中使用它們:for、while和do-while。

  • 錯題4:

  • 錯題4解析:Java測試的條件操做符在本例中爲條件(x < 0),若是爲真,則返回值後的值?(本例中爲x),若是爲false,則返回:(在本例中爲0)。原始的if語句是將y賦給x (x < 0)和0。這將經過將y賦值爲x或0 (x < 0)來完成,如a在B中所示,x被賦值爲y或0,這是向後的。在C中,條件操做符是語法無效的。在D中,根據(x < 0), y將被設置爲true或false,而E中的語句在語法上是無效的。

  • 錯題5:

  • 錯題5解析:變量x從10開始。每一個循環經過循環,x遞減,循環最後退出,一旦x再也不大於0,在這個例子中,當x變成0。因此循環體執行x = 10, x = 9, x = 8,下面是x = 0。這是11倍。

  • 錯題6:

  • 錯題6解析:變量j從字符串長度到1,每次打印出位置j-1的字符。長度爲1的字符是第一個字符,這是字符串的最後一個字符。它一直持續到j = 1,並輸出位置j - 1或第0字符的字符,以便向後打印整個字符串。

  • 錯題7:

  • 錯題7解析:這個循環初始化j到0,並將其與1000進行比較,可是在每次循環迭代以後都不會改變。在實際中,循環將會隨着運行時錯誤而終止,最終當我變得太大時,一個值存儲在內存中,但邏輯上,這是一個無限循環。

  • 錯題8:

  • 錯題8解析:誠然,while循環能夠是無限循環,但Java for-loop也能夠是無限循環。在許多其餘編程語言中,for循環都有一個開始和結束點,可是Java for循環比大多數其餘語言的for循環要靈活得多。

結對及互評

  • 博客中值得學習的或問題:
    • 侯澤洋同窗的博客排版工整,界面很美觀
    • 問題總結作得很全面
    • 對於書上的疑惑總會想辦法解決它,這種探索的精神值得我去學習
  • 代碼中值得學習的或問題:
    • 對於編程的編寫總能找到角度去解決
  • 本週結對學習狀況
    • 20172302
    • 結對學習內容
      • 第八章內容

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 309/309 1/1 20/20
第二週 269/578 1/2 18/38
第三週 236/776 1/3 22/60
第四周 507/1283 2/5 30/90
第五週 631/1914 1/6 30/120
第六週 529/2443 1/7 25/145

參考資料

相關文章
相關標籤/搜索