Java,為什麼叫Java呢?貌似和Oak有關,也貌似與爪哇有關,這是為啥呢?說到這,讓我想起了一首歌:不要問究竟。
前面篇簡單文字,使自己有了部分入手的感覺,因此今天我們來看一些比輕微複雜的Java項。
【Java 數組】
在Java中,也提供了與C/C++類似的數組的概念,在Java中數組強調的是Set的概念,即具有集合的特徵。在Java中聲明數組非常簡單,文法格式如下
所示:
datatype array_name[];
或者
datatype[] array_name;
這樣聲明的數組僅是定義數組名,並沒有構造數組對象,為了構造數組對象,我們需要使用new操作符進行構造,如下所示:
datatype[] arrayname;
array_name=new datatype[array_length];
數組引用和C一樣,通過下標(index)進行索引;其index_min=0、 index_max=array_length-1;
下面我們對數組進行一個測試:
/*This program test the control flow chart*/import java.util.*;public class Cfc{ public static void main(String[] args) { //array test int[] array_int; array_int=new int[10]; Scanner GetData=new Scanner(System.in); for(int i=0;i<array_int.length;i++) { System.out.println("Enter the "+(i+1) + " number:"+~0x7FFF+"<="+" number "+"<="+0x7FFF); array_int[i]=GetData.nextInt(); } for(int i=0;i<array_int.length;++i) { System.out.println("array_int["+i+"]:"+array_int[i]); } }}
上面的程式段,定義一個array_int數組,通過Scanner對象輸入10個數值,然後將數組列印出來。執行如下所示:
從這裡我們可以看到我們可以通過數組的length屬性擷取數組的長度,這是與C/C++不一樣的地方,在C中需要程式員自己來控制這個長度,時間常量
容易造成混亂。
有時需要變長數組,在C89裡面沒有提供變長數組的支援,而好像C99提供有有限的支援,在Java中通過類庫也提供了變長數組的支援,我們以後再討論。
知道了數組的定義和使用,我們就來做一件稍具挑戰的事情,對輸入的資料進行排序,下面我們對上面的程式稍加變化,來實現這個功能:
/*This program test the control flow chart*/import java.util.*;public class Cfc{ public static void main(String[] args) { //數組測試 int[] array_int; array_int=new int[10]; Scanner GetData=new Scanner(System.in); //提示使用者輸入資料: System.out.println("Enter 10 numbers:"+~0x7FFF+"<="+" number "+"<="+0x7FFF); for(int i=0;i<array_int.length;i++) { array_int[i]=GetData.nextInt(); } //列印數組 for(int i=0;i<array_int.length;++i) { System.out.println("array_int["+ i +"]:"+array_int[i]); } System.out.print("\n\n"); //對數組進行排序,最簡單的冒泡法 int temp=0; for(int i=0;i<array_int.length;++i) for(int j=array_int.length-1;j>i;j--) { if(array_int[j]<array_int[j-1]) { temp=array_int[j-1]; array_int[j-1]=array_int[j]; array_int[j]=temp; } } //列印數組 for(int i=0;i<array_int.length;++i) { System.out.println("array_int["+ i +"]:"+array_int[i]); } }}
上面的代碼啟動並執行結果是:
在Java中對數組的處理還有幾點特殊的地方:
1、數組初始化,不需要new進行初始化。
int[] int_array={1,2,3,4}; //定義了一個int型的陣列變數,int_array, 數組具有index=0、1、2、3
2、匿名數組
int[] int_array=new int[] {1,2,3 ,4,5}; // 後面的int[] {1,2,3,4,5}為匿名數組
這裡我們通過匿名數組來初始化數組數組,注意這裡的初始化與C語言中的初始化意義相同
3、數組複製
Java提供了一個數組複製的機制,利用Arrays類的copyOf()方法可以實現數組的複製。
還可以利用System.arraycopy方法來進行數組的截取複製。其文法格式是:System.arraycopy(from,index_start,to,copy_length);
這兩個方法主要的作用是用來增加數組的長度。具體應用我們就不舉例子了。
【Java if語句】
IF語句的使用頻率非常之高,因此這裡我們介紹一下IF語句;如果你接觸過C/C++的話,那麼Java的IF語句的使用將會是非常簡單的,在Java中
IF語句和C/C++中一樣。其文法格式如下所示:
Style 1:
if(boolen condition) statement; other statement; // 如果if語句括弧中的判斷條件為真,則執行statement;否則就執行other statement。
Style 2:
if(boolean condition)
IF_statement;
else
Else_statement;
Other_statement;
如果boolean condition為True,那麼就執行IF_statement語句(可以為語句塊),然後執行Other_statement; 如果boolean condition為False,那麼就
執行Else_statmetn(可以為語句塊),然後執行Other_statement。
Style 3:嵌套IF語句
嵌套IF語句遵循上面兩條規則,同時Else部分將於最近的IF部分匹配。如下:
if (boolean condition 1)
if(boolean condtion 2)
statement;
else
statement;
如上所示,else子句就與boolean condition 2的if子句匹配,構成一個內部嵌套IF子句;為了程式碼的可讀性,建議每個IF語句中
加上{}構成語句塊,這樣能更好的區別IF、ELSE的匹配情況,如下:
if (boolean condition 1)
{
if(boolean condtion 2)
statement;
else
statement;
} //End of boolean condition 1 IF
【Java While迴圈語句】
Java中while迴圈語句與C/C++語言中while語句也非常相似;這裡就不多說了。
Java中還提供了一個do....while迴圈,do...while迴圈的迴圈體,必須至少執行一次。
註: 有些書籍將while迴圈叫做“當型”迴圈,即當條件不為真時結束迴圈;而將do..while迴圈叫做“直到型”迴圈,直到條件不成立時結束迴圈。
【Java For迴圈語句】
Java的迴圈For迴圈,通常用於迴圈次數確定的迴圈(當然,迴圈次數不確定的也可以用);Java中For迴圈和C/C++的結構類似,這裡也不介紹了;
值得說明的是:
可以再for迴圈語句中定義for語句中可用的變數,這些變數只是在for語句中可見;當在for語句中定義的變數與for語句外的變數重名時,那麼就會出現
符號重定義的錯誤,如下所示:
/*This program test the control flow chart*/import java.util.*;public class Cfc{ public static void main(String[] args) { //數組測試 int[] array_int; array_int=new int[10]; //定義i變數,看是否會影響for語句中i變數 int i; i=100; Scanner GetData=new Scanner(System.in); //提示使用者輸入資料: System.out.println("Enter 10 numbers:"+~0x7FFF+"<="+" number "+"<="+0x7FFF); for(int i=0;i<array_int.length;i++) { array_int[i]=GetData.nextInt(); }
這是與C/C++中,小範圍變數屏蔽大範圍變數的機制不一樣的地方,需要注意。
在For語句和while語句中還有一點必須注意:就是必須保證for迴圈體中的每一條語句都有機會執行到,否則就會報錯,這在很多C/C++程式中也是
經常會出現的。
1 public class Break 2 { 3 public static void main(String args[]) 4 { 5 int int_var=10; 6 7 for(;int_var>1;) 8 { 9 break;10 System.out.println("Can you see this statement!!!");11 }12 13 System.out.println("Break statement hava interupt the if statemtn");14 }15 }
上面的代碼編譯的結果如下:
【Java 枚舉類型】
為啥在這個地方說枚舉類型呢? 因為接下來要說switch語句,可以看到switch語句和枚舉類型具有“天然”的聯絡。
Java中也提供了枚舉類型,這種類型在處理一些問題的時候,非常方便。例如: 月份、星期、商城果品種類等。在Java中定義枚舉類型也非常的容易;
其文法格式如下所示:
enum Week {Mon、Thu、Wend、Ths、Fri、Sat、Sun};
這樣就定義了一個Week的枚舉類型(在這裡我們不分別聲明和定義,不拘束於C/C++中聲明與定義的差異),我們可以利用它來定義變數:
Week Vication;
Vication=Week.Mon ; //這裡需要注意,賦初值的時候,需要指定枚舉的類型。但也寫特殊的情況不需要指定枚舉類型。這裡我們就不多說了。下面是我
通過度娘搜尋的一個連結:http://www.cnblogs.com/Fskjb/archive/2009/08/03/1537917.html 裡面有關於枚舉類型的詳細的介紹。
要點:
枚舉類型變數可以賦值為null,表示枚舉類型變數沒有初始化;注意的是null並不表示枚舉變數沒有指向確定的記憶體,定義枚舉變數後就已經分配記憶體了,這
與C語言中null不一樣。
【Java switch語句】
swith語句適用於知道選擇項目集合的情況,例如我們到商城買衣服,裡面有不同的品牌,我們通過enum定義一個衣服類別的類型,然後我麼就可以
根據使用者的選擇來判斷價錢、折扣等資訊。
Java中switch語句和C/C++中的機制一樣,這裡不多說。具體可以參考上面的連結。
需要說明的一點是:如果在Java中結合使用enum和swith語句,那麼在swith語句的case 子句部分不需要指定枚舉的類型資訊,如:
Week workday=Week.Sun;
switch(workday)
{
case Mon:
statement;
break;
case Week.Thu:
statement;
break;
.......
}
可以看到,這時在case子句中不需要指定枚舉類型名Week,當然也可以指定,如上執行個體所示。
要點:
1、break, 在每個Case子句後一般需要加上break語句;當然這不是必須的,我們可以選擇幾個case子句執行一個語句(語句塊)。
2、default 在switch語句中可以用default子句,這個與C語言一樣。具體不多說。
【Java break和continue語句】
break語句用來中斷正常的控制流程程,它一般用來跳出迴圈和switch語句。
例如:
/*This program test break statement*/public class Break{ public static void main(String args[]) { int int_var=10; //can execute forever ?? for(;int_var>1;) { System.out.println("Can you see this statement how many times???"); break; } System.out.println("Break statement hava interupt the if statement"); }}
執行結果如下:
那麼下面的程式能執行多少次呢?
1 /* 2 This program test break statement 3 */ 4 5 public class Break 6 { 7 public static void main(String args[]) 8 { 9 int int_var=4;10 12 for(;int_var>1;int_var--) 13 for(int i=0;i<5;i++)14 {15 System.out.println("How many times can you see this statement ???");16 break;17 }18 19 System.out.println("Break statement hava interupt the if statement!!!");20 }21 }
這個謎題大家自己怎麼看? 這裡我就不說出結果了,有興趣的可以自己試試,當然在測試之前你可以說一下for迴圈體重的語句究竟會輸出幾行??。
有時候,在嵌套迴圈中,為了跳出整個大迴圈,就是跳出來執行迴圈後面的語句,我們應該怎麼辦呢? 在Java中提供了另外一種機制:break label機制。我們
對上面的代碼稍微做一點改變,看結果又會是怎樣:
/*This program test break statement*/public class Break{ public static void main(String args[]) { int int_var=3; //測試break label機制: break_label: for(;int_var>1;int_var--) for(int i=0;i<5;i++) { System.out.println("How many times can you see this statement ???"); break break_label; } System.out.println("Break statement hava interupt the if statement!!!"); }}
這段代碼執行後又是什麼結果呢?我們就賣關子了:
看到沒,for迴圈體的語句僅執行了一次。
要點:
break語句跳出迴圈體包含的迴圈,而break label語句可以跳出break label標誌的迴圈。即break與最”近“的迴圈體匹配,而break label則與
break label所標誌的迴圈匹配。
continue語句與C語言中的機制一樣,就是會中斷本次迴圈體的執行過程,而不會跳出本迴圈。我們可以通過下面的程式比較break和continue的差別:
1 /* 2 This program test break statement 3 */ 4 5 public class Break 6 { 7 public static void main(String args[]) 8 { 9 int int_var=4;10 11 12 for(;int_var>1;int_var--) 13 for(int i=0;i<5;i++)14 {15 if(i==1)16 continue; 17 18 System.out.println("How many times can you see this statement ???");19 20 }21 22 23 System.out.println("Break statement hava interupt the if statement!!!");24 }25 }
上面的程式執行結果:
我們在看下一段代碼:
我們看到了,continue並不能跳出迴圈體,而break可以跳出迴圈體。
這次小結,主要的是對Java的結構化編程的控制流程程進行大致的描述,後面還會進一步進行討論。
因為我感覺寫這些東西都是自己學習的過程的小結,自己以前接觸過C/C++;因此有些時候寫的內容會有點穿插。但是這樣的穿插可能不適合
完全沒有基礎過電腦編程的人員。