她似乎是真的下定決心學習寫程序了,自從買了書以後,幾乎每天有空閒的時候,她都會捧着那本書看,雖然看書的同時,眉頭是緊鎖的。我對此很是理解,也許對於沒有入門的人來說,寫程序的教材真的就是天書一般,一如我剛接觸時一樣,整整用了一個學期的時間才明白了寫程序是做什麼。看她這樣,我好像是開心的,因爲這樣她才需要我,因爲這樣我纔有更多的理由和她待在一起。
“戴老師!”在我去洗手間路過她的工位時,她叫住了我,“你快給我講講,這個我真是看不懂啊!”
她心急如焚的樣子,而我是真的有些急,因爲我憋了好一會兒,把手頭上的代碼寫完纔去上廁所的。
“等我上個廁所來。”我扔下這麼一句話,匆匆忙忙而去。
當我從廁所回來時,正好遇上了她期盼的目光以及一連串的問話。
“標識符是什麼?爲什麼關鍵字不能做標識符?什麼是數據類型?什麼是變量?運算符就是加減乘除符號嗎?......”
“1加1等於幾?“沒等她說完,我問到。
”等於2啊。“她愣怔了一下,然後說着,用莫名其妙的眼神看着我。
”對,是等於2。那如果讓程序來算呢,要怎麼寫程序?“
”不知道。“她很乾脆的回答。
”試試吧。“我指了指她的筆記本電腦,”按你的想法試試。“
她打開了電腦,然後新建了一個文本文件,然後將後綴名.txt改成了.java,看到這樣的舉動我有些欣慰,她還記得java程序的源文件都是以.java作後綴名的。但後面的事,在我意料之外又在意料之中。她打開了那個文件,然後在裏面輸入:
1+1
"就這樣?”我問。
“是呀。”她說,隨即她又說,“我知道我寫得不對,我就說了我不知道怎麼寫的嘛。”
“好吧。“我說,”但是你沒發現書上所有的示例代碼都是有一個main方法的嗎?“
她茫然的看着我,我知道她不知道我在說什麼,於是我在書上隨便找了一個示例代碼給她看。
”看到沒有?就像這樣的,你要記住所有程序的入口都是main方法,也就是說程序是從你的main方法開始執行的。“
她依然茫然,但我無法解釋更多,於是我拿了一支筆在她的書上畫了兩個紅框,然後說:”好吧,你先記着,所有的代碼都寫在紅色方框圈起來的那兩部分之間就行了。或者說寫代碼都要寫上那兩部分。“
”好的。“她說着,把她剛剛寫的代碼改了:
”這樣?“她試探着問。
”嗯,不對,還有一點你要記住,java程序的每一條語句都是以英文字符的分號結尾的。“
”哦“,她說着,立馬在那個1+1後面加了一個分號:
”這下好了。“她說。
”沒有呢。“我說。
“還不對?”她問。
“不對,你剛剛不是問什麼是變量嗎,現在就需要變量上場了。”我說,“你想一下,你這樣加過以後的結果放哪裏呢?”
“哦,我知道了,變量就是用來放結果的。”她有些高興起來,因爲她突然的領悟。我也高興起來,因爲她的高興。
“對了,變量就是用來放數據的。”我說着,開始改她的代碼,因爲我知道她雖然似乎明白了變量是什麼,但還是對眼前的代碼束手無策:
當然,我寫了條輸出結果的代碼,以便看到計算結果:
有了結果,她很高興,然後興致勃勃的將1+1改成1+2、3-4等進行實驗,所幸電腦不是傻瓜,都輸出了正確的結果。突然之間她又犯難了,因爲她想試一下乘除,可是鍵盤上根本沒有小學課本中的那個乘號和除號。
“鍵盤上沒有乘號和除號也,那怎麼進行乘除啊?”她用求助的眼神看着我說。
“有的啊。”我說。
“哪裏呢?”她不解。
“這裏”我指着鍵盤上的 * 和 / 說。
”哦,難怪書上講運算符那裏出現這兩個符號,原來是乘除啊。“
說完,她又去試乘除運算。乘法沒有問題,都輸出了正確結果,但除法卻出了問題。在她計算3/2時,輸出的結果竟然是1。
“電腦出問題了?”她疑惑是電腦犯傻了。
“電腦沒有錯,是你錯了。”我有些覺得好笑,因爲這對於一個老程序員來說幾乎是常識了,當然對於她來說不是,於是我不經意的笑,立即招來她的白眼。
“笑什麼?難道3除以2不是應該等於1.5的嗎?”她說。
“是1.5沒錯。但是你用來存結果的變量錯了,你用的變量是整型的,也就是說只能存整數,你用它來存小數,他就自動把小數扔掉了。這就是數據類型,不同的數據類型要用不同的類型變量來存,不然就會出現數據丟失的問題。所以......”
“所以這裏要用小數類型的變量來存。”沒等我說完,她就興奮地接過我的話說到。
“對,說得沒錯,那麼改一下程序吧。“
”怎麼改?“她問。
“在Java中用於存儲小數的數據類型有兩個,一個是double,一個float。”我說着,將書翻到基本數據類型說明那裏給她看,“這裏有詳細說明。”
類型 |
型別 |
字節 |
取值範圍 |
byte |
整型 |
1byte |
-27 ~ 27-1 |
short |
整型 |
2byte |
-215 ~ 215-1 |
int |
整型 |
4byte |
-231 ~ 231-1 |
long |
整型 |
8byte |
-263 ~ 263-1 |
float |
浮點型 |
4byte |
3.402823e+38 ~ 1.401298e-45 |
double |
浮點型 |
8byte |
1.797693e+308~ 4.9000000e-324 |
char |
文本型 |
2byte |
0~216-1 |
boolean |
布爾型 |
1byte |
true/false |
”嗯,我看了這裏的,但是這兩個有什麼區別呢?“她接着問。
”區別就像不同大小的水桶一樣,裝的數據的大小不同,float類型的變量裝的數據小一些,double裝的數據大一些。“我打了個比喻,希望她能好理解一點。
”好吧,大概理解了。“她說着,改了下代碼。
”這樣?“她回頭看着我,不確定的說。
”試試不就知道了。“我說。
於是她編譯後運行,但結果卻出乎意料。
“還是不對啊。”她嚷着,“難道真是我電腦壞了?”
我覺得好笑,是不是每個開始學寫程序的人都是這樣,會懷疑是電腦出問題了呢。
“哈哈,”我笑着說,“電腦沒有壞,只是這裏要用到類型轉換。”
“其實計算機的計算過程是這樣的,3是整型,2也是整型,它發現都是整型,它就猜測結果也應該是整型,於是它就把計算結果放到一個隱形的整型變量裏面,也就是1放到了一個隱形變量中了。”說着我指着那個等號,“看到那個等號沒,那個是賦值運算,就是把一個變量的數據拷貝到另一個變量裏。這裏計算機就把剛剛計算的結果1從隱形變量中拷貝到變量a中了,明白沒有,這裏我們輸出的是變量a裏面的值,當然就是1了,又因爲a這個變量是float類型的,所有就是1.0了。”我說了這麼一大段,也不知道它明白了幾成。不過她顯然對賦值這個新的概念產生了興趣,聽完我的一通囉嗦的解釋,她問道:“爲什麼要進行賦值運算呢?"
”因爲我們要把運算結果存起來,以便後續使用。其實,程序很多時候就是把各種數據搬來運去的,這就需要容器來存數據。說得更深一點,就是數據在內存中和各種外存中搬來運去,不過你現在先不管什麼內存了。“
”好吧,那現在怎麼弄?“
”這個好辦,用強制類型轉換,將3或者2,只要其中一個變成小數,計算機就知道結果要是一個小數了。“說着,我改了一下代碼,這回如期所料,輸出了正確的1.5。
”哦,這就是強制類型轉換,就是在前面加一個括號括起來的類型就可以了。我在書上看到過的,只是不知道用在哪裏。“她爲又get到新技能而高興起來。
我想,通過這個例子,她應該已經基本掌握了變量、數據類型、運算符這些基礎概念了,於是我說:“那現在是不是已經不用我回答你最開始提出那一連串問題了吧?”
她想了想,說:“嗯,我來說一下我的理解,你看我說得對不對。”
“好。“我說。
”1、數據用變量來存;
2、變量是有類型的,不同類型所能存儲的數據大小不同;
3、不同類型變量之間可以進行轉換,轉換過程中可能丟掉一部分數據,就像大桶裏的水倒入小桶一樣,如果超出小桶的容量,那麼就會把多餘的水弄丟;
4、運算符就是加減乘除這些表示運行的符號;
對了,還有賦值是一個等號,表示將右邊的值拷貝到左邊的變量中。“
她能總結出個123來,這讓我有些意外,但隨即又覺得理所當然是這樣,因爲她一直在看書的嘛,很多概念她其實早有理解,這只是自己不確定理解對不對。對此,我不禁流露出讚許的目光。
”嗯,還有,標識符就是變量的名稱是嗎?“她問。
”可以這樣說吧,但不光是變量的名稱,是一切的名稱都統稱爲標識符,後面你會發現,我們定義類,寫方法這些都需要一個名字的。“我回答到,”所以,關鍵字知道是什麼了嗎?“
”嗯,關鍵字就是被用過的標識符。“
”對,你悟性很高,很適合做程序員。“我有些調侃地讚歎道。
她很高興,臉上洋溢着得意的笑。
“現在我們來做一個比較複雜點的題目吧。”我想乘熱打鐵讓她鞏固一下今天所學的內容。
“好啊。”她回答道,臉上依然是笑意盈盈,似乎現在已經能寫出任何程序來了。
“那我就出題目了哦。”
“你說。”
“一個學校1年級有兩個班,a班有31個學生,b班有35個學生,現在要將這兩個班的學生拉到操場上做課間操,如果7個人一排,那麼問題來了,1可以排幾個整排,2是否有剩餘人數不能湊成整排,如果有剩餘人數,那是剩餘多少人?”
”這個簡單。“她自信滿滿,”31+35等於66,然後66除以7等於9餘3。有答案了,可以排9個整排,剩餘3個人不能湊成整排。”
“我沒叫你算啊,我是讓你寫程序,讓計算機算。”
“額,我試試。”
於是,接下來的10來分鐘,她的注意力都在她的電腦之上,而我卻欣賞着她因專注散發出來的美。
“寫好了。”她擡起頭來對我說,我突然覺得有點尷尬,忙把目光從她身上移到她的電腦屏幕上。
”不錯。“我說,”求餘都會了。“
”那當然,我又不笨,這些在書上不都寫得有嗎。“她說着,指着書上運算符介紹的表格給我看。
優先級 |
運算符 |
簡介 |
結合性 |
1 |
[ ]、 .、 ( ) |
方法調用,屬性獲取 |
從左向右 |
2 |
!、~、 ++、 -- |
一元運算符 |
從右向左 |
3 |
* 、/ 、% |
乘、除、取模(餘數) |
從左向右 |
4 |
+ 、 - |
加減法 |
從左向右 |
5 |
<<、 >>、 >>> |
左位移、右位移、無符號右移 |
從左向右 |
6 |
< 、<= 、>、 >=、 instanceof |
小於、小於等於、大於、大於等於, 對象類型判斷是否屬於同類型 |
從左向右 |
7 |
== 、!= |
2個值是否相等,2個值是否不等於。 下面有詳細的解釋 |
從左向右 |
8 |
& |
按位與 |
從左向右 |
9 |
^ |
按位異或 |
從左向右 |
10 |
| |
按位或 |
從左向右 |
11 |
&& |
短路與 |
從左向右 |
12 |
|| |
短路或 |
從左向右 |
13 |
?: |
條件運算符 |
從右向左 |
14 |
=、 += 、-= 、*= 、/=、 %=、 &=、 |=、 ^=、 <、<= 、>、>= 、>>= |
混合賦值運算符 |
從右向左 |
她很得意,因爲她發現她看懂了書上的內容,但我卻不合時宜的潑了冷水:”不錯是不錯,但不夠完美。“
”那怎麼寫?“她收了她臉上的笑容。
我覺出我我的直男癌來,但我是想讓她學到更多,所以也不管那麼多了,我動手改起她的代碼來。
編譯運行:
看了我改過的代碼,她驚訝道:”還能這樣?變量也能拿來計算?“
”當然,而且是必須的,以後你會發現程序基本上都是對變量進行計算的。你發現沒有,這裏我用上一步計算得到的餘數來和0比較,是不是比你寫一堆算式要簡單很多。“
”哦,我記着了。“她說,突然又問:”優先級是不是就跟以前小時候學算術一樣,加減乘除在一起的時候要先算乘除,所以要先算加減的話就要加括號?“
”是這樣的,完全正確,一般我們很少去記各個運算符的優先級,反正要先算的都用括號括起來就好了。“
”哈哈,你這是在教學生偷懶哦,你這老師不太合格哦。“
”呵呵。”我笑了,沒再說什麼。