【Java】_2_Java程式入門第四課

來源:互聯網
上載者:User

  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++;因此有些時候寫的內容會有點穿插。但是這樣的穿插可能不適合

完全沒有基礎過電腦編程的人員。

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.