教她寫代碼的那些日子 3 java語言基礎

她似乎是真的下定決心學習寫程序了,自從買了書以後,幾乎每天有空閒的時候,她都會捧着那本書看,雖然看書的同時,眉頭是緊鎖的。我對此很是理解,也許對於沒有入門的人來說,寫程序的教材真的就是天書一般,一如我剛接觸時一樣,整整用了一個學期的時間才明白了寫程序是做什麼。看她這樣,我好像是開心的,因爲這樣她才需要我,因爲這樣我纔有更多的理由和她待在一起。

“戴老師!”在我去洗手間路過她的工位時,她叫住了我,“你快給我講講,這個我真是看不懂啊!”

她心急如焚的樣子,而我是真的有些急,因爲我憋了好一會兒,把手頭上的代碼寫完纔去上廁所的。

“等我上個廁所來。”我扔下這麼一句話,匆匆忙忙而去。

當我從廁所回來時,正好遇上了她期盼的目光以及一連串的問話。

“標識符是什麼?爲什麼關鍵字不能做標識符?什麼是數據類型?什麼是變量?運算符就是加減乘除符號嗎?......”

“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比較,是不是比你寫一堆算式要簡單很多。“

”哦,我記着了。“她說,突然又問:”優先級是不是就跟以前小時候學算術一樣,加減乘除在一起的時候要先算乘除,所以要先算加減的話就要加括號?“

”是這樣的,完全正確,一般我們很少去記各個運算符的優先級,反正要先算的都用括號括起來就好了。“

”哈哈,你這是在教學生偷懶哦,你這老師不太合格哦。“

”呵呵。”我笑了,沒再說什麼。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章