1.條件判斷
a.if語句: 若是條件表達式的運算結果是true,則執行if中的語句,而後執行if後面的語句
b.if-else語句:若是條件成立執行第一條語句,不成立則執行else語句。
c.switch語句:先計算表達式,與幾個可能的case子句取值進行匹配,控制會跳轉到第一條匹配的case子句執行。無匹配則執行default。java
2.循環
a.while:先執行表達式計算,循環體執行完後再次計算表達式,直到爲false,退出循環。接着執行循環體後的語句。
b.do:將循環條件放到循環體的尾部,使先運行循環體,再對控制條件進行計算,以確保do循環體至少會執行一次
c.for:適用於循環執行前已經確切知道具體的循環次數(循環頭內聲明的變量在循環體外部不能用)git
問題1解決過程:字符和字符串的比較以Unicode字符集爲基礎。這種比較稱爲字典順序比較。而其只比較第一個字符,若是不一樣則其後再也不比較。程序員
問題2解決過程:首先是for循環特別適用於執行前已經確切知道具體循環次數的狀況。
形式上的不一樣:for語句有個控制頭,分爲三部分。執行初始化的第一部分只執行一次:這裏有個須要注意的地方,就是控制頭裏聲明的變量在循環體外不能被使用也不能被修改。
而後執行循環體前要先計算布爾表達式,結果爲true以後執行循環體。最後才執行第三部分的增量。若是布爾表達式結果爲false,則不執行循環體,也不執行增量增長。for循環的控制頭的形式很容易讓人以爲它是判斷後就執行第三部分增量增長,再執行循環體編程
問題1:這個編程項目要求輸入一個任意長度的整型數值,而後分別輸出其中的奇數,偶數,零的個數。編譯的時候出現如圖錯誤:
app
問題1解決過程:錯誤的大概意思是說什麼超出了邊界,結合出錯的位置,發現了緣由:while的條件判斷出現了問題,第一次都沒法執行,也就是循環體一次也執行不了。這也體現了do語句的特色:循環體至少執行一次。修改了條件判斷以後,就正常運行了。
另外要記錄的是:一開始受書上例題判斷一個字符串是否爲迴文的影響,先入爲主,也從用戶輸入的數值左右同時判斷,但產生了一個問題就是:若是你輸入的是有奇數個數字的數值,會有中間的那個數字沒法被判斷。後來發現徹底不必,從左邊一個數字一個數字地判斷就都能保證都可以被判斷,直到最後一個數字結束循環。
我用的是判斷拿出來的字符是否是二、四、六、八、0中的一個,就能夠了,用上邏輯或的話,代碼也不是很長。固然用取餘等其餘方法也能簡單的作出來。函數
問題2:一個編程項目要求輸出12x12的乘法口訣表,第一次作出來的運行結果如圖:
學習
問題2解決過程:從這個程序的編寫過程發現了不少問題和收穫:
1.截圖的最上方出現的就是一個無限循環,這也是編寫修改的過程當中出現的一個錯誤,對於條件判斷語句的界限設置很模糊,一不當心就會形成循環體執行一次或者就是無限循環,要不就是不執行。因此我認爲,條件和循環語句的最重要的部分就是條件表達式的書寫,也是一個比較難的東西(對於我本身來講)
2.下面的狀況就是:修改了一下判斷語句,最後結果就只輸出了12x12乘法表的第一列,很明顯這是循環體裏出現的問題。部分代碼以下:
上圖中的是最後的正確代碼。
首先,這是參考了書上輸出星星的那個例題,若是是要我直接去編寫這個程序,很難相信我能像乘法表那樣輸出出來。
再有就是,這個程序若是在一開始學Java時也能作出來,直接算出來,而後用輸出語句輸出出來就好了。可是,這裏很顯然要用循環語句輸出。從代碼行也能看出來16行就解決了問題。並且只要修改了行數,幾乘幾的乘法表都可以階梯狀地輸出出來。甚至用上Scanner類,能夠與用戶交互。
一開始作了不少修改,主要是不清楚這個循環的結構,後來試了幾回,再結合書上的例題。先搞清楚這個循環結構的原理:第一個for循環是限制了要計算的乘法口訣的行數;內嵌的for循環:百度了一張九x九乘法表,發現主要想操做的就是「x」左右的操做數,第二個數就是行數,不用再另外聲明變量。第一個操做數在每一行都呈現出規律,從左向右從1依次增長到行數。而後跳出循環。這個時候想要另起一行輸出,只要在內嵌循環的外面加一條能夠換行的空白輸出語句println,可是他仍是要在最外邊的循環裏邊,由於每一次輸出完一行都得換行。最後達到要輸出的行數,因而跳出循環,結束。
如圖是輸出的運行效果:
測試
問題3:一個編程項目要求輸入一個年份,根據條件判斷其是否爲閏年,如圖是我第一次寫的代碼:
這個代碼是可以運行的。但存在的問題是它沒法按照條件語句準確地判斷一個數是否爲閏年,輸出的結果老是「不是閏年」。按照我原本的判斷方法,思路是:若是一個數不能被4整除,那它必然會有小數,而我只要判斷這個數字和這個數字除以4再取整乘4的結果比較就好了。若是整除,兩數必定相等。從而產生兩個結果,達到判斷目的。可是很顯然,這個代碼很難看,不少,而且輸出的結果沒有達到預期。設計
問題3解決過程:首先分析了一下這種判斷方法,理論上是能夠的。一開始考慮到的是算數運算符與取整的前後級問題,因此加了不少括號。但結果依然不行,條件的嵌套也是沒問題的。最後想到的緣由多是整數的除法以後取整與原數的比較存在問題。書上說過浮點數的比較是要計算差的絕對值與偏差標準比較的。
其實解決這個問題的編程方式有不少,只要能達到區分的目的就好了。也借鑑了其餘同窗的方法---「取餘」。這個計算就很是簡單了,代碼也很清晰。
這也爲我提供了一個思路: 有的時候,一種方法產生的錯誤若是始終找不到修正的方法,換個方法思路也許會更容易更簡單地去解決問題。3d
錯題1:
錯題1分析:保留字「new」用於實例化一個對象,即建立類的實例。語句new後面跟着類名。這調用類的構造函數。
錯題2:
錯題3:
錯題3分析:全部的方法都隱含返回某個東西,所以必須有一個返回語句。可是,若是程序員但願編寫一個不返回任何內容的方法,所以不須要返回語句,那麼它就必須是void方法
錯題4:
錯題4分析:一旦方法終止,用調用該方法的方法控制簡歷。在這種狀況下,m2調用m4,所以當m4終止時,m2恢復。
錯題5:
錯題5分析:實例數據是組成類的實體,多是任何類型的實體,不管是原始的仍是對象的,而且多是公共的或私有的。經過使用對象做爲實例數據,它容許在其餘類上構建類。類具備其餘類的實例數據的關係稱爲has-a關係。
錯題6:
錯題6分析:它是一個語法違例,聲明任何類型的構造函數都是無效的,所以會收到一個語法錯誤。
錯題7:
錯題7分析:只有驅動程序須要一個主方法。驅動程序是第一個在任何Java程序中執行的程序(除了applet),可是它能夠根據須要調用其餘類,而這些其餘類不須要主要方法。
錯題8:
錯題8分析:全部的Java方法都返回一個單獨的項,無論它是一個原始數據類型的對象,仍是void。保留字continue用於退出循環的其他部分並再次測試該條件。
錯題9:
錯題9分析:靜態方法是類自己的一部分,而不是實例化的對象,所以靜態方法在類的全部實例化對象中共享。
因爲靜態方法是共享的,所以不能訪問非靜態實例數據,由於全部非靜態實例數據都是特定於實例化對象的。靜態方法能夠訪問靜態實例數據,由於與方法同樣,實例數據在類的全部對象中共享。靜態方法也能夠訪問傳遞給它的參數。
錯題10:
錯題10分析:測試是必需的,由於全部的軟件都會有錯誤。複雜系統在發佈以前尤爲須要測試。所尋找的錯誤類型是邏輯錯誤和運行時錯誤。在實現過程當中,全部語法錯誤都將被識別和修復。
錯題11:
錯題11分析:任何類均可以擴展,不管是接口、實現接口,仍是二者都沒有。惟一的例外是,若是類被顯式地修改成「final」,在這種狀況下它不能被擴展。
錯題12:
錯題12分析:在黑盒測試中,測試人員不該該知道軟件是如何實現的。本質上,軟件是一個黑盒,它有輸入和輸出,程序的機制是不透明的。若是測試人員確實瞭解程序是如何工做的,那麼測試人員的測試用例可能會有誤差。若是測試人員知道程序是如何工做的,那麼測試就稱爲「玻璃盒測試」。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 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 | 52/90 | |
第五週 | 631/1914 | 1/6 | 82/120 |