JavaSE數組詳解與實戰案例應用

1.數組聲明:

第一種:數據類型 變量名[],例如:int x[];

第二種:數據類型[] 變量名=new 數據類型[要在內存中開闢的空間數量,例如:int[] x=new int[3];

第三種:數據類型[] 變量名=new 數據類型[]{元素1,元素2,元素3};


例子1:

public staticvoidmain(String[] arg){

       //定義一個字符串數組,將各個元素(也就是月餅)放入其中

       String[]names={"五仁月餅","香辣牛肉月餅","金嗓子月餅","韭菜月餅"};

      

       //通過for循環遍歷一下數組,通過輸出語句判斷循環輸出

       //names.length是數組的長度,names是輸出數組下標爲i的元素名稱

       for(int i = 0;i<names.length;i++){

           System.out.println("我吃到第"+(i+1)+"個月餅是"+names);

       }

    }

輸出結果:

我吃到第1個月餅是五仁月餅

我吃到第2個月餅是香辣牛肉月餅

我吃到第3個月餅是金嗓子月餅

我吃到第4個月餅是韭菜月餅

2.數組常見的異常(2種)

1)空指針異常(NullPointerException)

原因:數組沒有分配內存空間

public staticvoidmain(String[] args) {

       //空指針異常

       //錯誤提示:NullPointerException

       String[]names=null;

       System.out.println(names[1]);

    }

輸出結果:

Exception in thread "main" java.lang.NullPointerException

    ata2.NullPointerException(a2.java:10)

    ata2.main(a2.java:5)

2)數組越界異常

原因:下標超出了數組長度

public staticvoidmain(String[] args) {

       //數組越界異常

       //ArrayIndexOutOfBoundsException

       String[]names={"五仁月餅","香辣牛肉月餅","金嗓子月餅","韭菜月餅"};

       System.out.println(names[4]);


3.數組內存結構分析

棧內存和堆內存的區別:

數組內存分爲 棧內存 和 堆內存。

棧內存 中是用來存放變量名的,存放確定大小的,存的是一個內存地址,通過它可以從堆內存中找到其對應的值,存取速度比堆內存快,例如:names

堆內存 中用來存放值的,存放不確定大小的,需要動態代碼運行到這一句纔會確定大小,例如:"小明"


4.多維數組

習題:3個班級各4名學員參賽,計算每個班的平均成績

public staticvoidmain(String[] args) {

       //創建一個鍵盤輸入

       Scannerinput = newScanner(System.in);

       //定義一個scores二維數組,第一個存班級數量,第二個存學生數量

       int scores[][]=new int[3][4];

       //遍歷,將輸入的成績存入到二維數組scores中

       for (int i = 0; i < 3; i++) {

           for (int j = 0; j < 4; j++) {

              System.out.println("請輸入第"+(i+1)+"個班級的第"+(j+1)+"個同學的成績:");

              scores[j]=input.nextInt();

           }

       }

      

       //輸出二位數組的每個元素

       for (int i = 0; i < 3; i++) {

           System.out.println("第"+(i+1)+"個班級的學員成績:");

           int sum = 0;

           for (int j = 0; j < 4; j++) {

              System.out.println("第"+(j+1)+"個學員的成績是:"+scores[j]);

              sum+=scores[j];

           }

           System.out.println("第"+(i+1)+"個班級的平均分是:"+(sum/4));

       }

    }


輸出結果:

請輸入第1個班級的第1個同學的成績:

61

請輸入第1個班級的第2個同學的成績:

71

請輸入第1個班級的第3個同學的成績:

85

請輸入第1個班級的第4個同學的成績:

92

請輸入第2個班級的第1個同學的成績:

64

請輸入第2個班級的第2個同學的成績:

73

請輸入第2個班級的第3個同學的成績:

95

請輸入第2個班級的第4個同學的成績:

66

請輸入第3個班級的第1個同學的成績:

35

請輸入第3個班級的第2個同學的成績:

73

請輸入第3個班級的第3個同學的成績:

83

請輸入第3個班級的第4個同學的成績:

94

第1個班級的學員成績:

第1個學員的成績是:61

第2個學員的成績是:71

第3個學員的成績是:85

第4個學員的成績是:92

第1個班級的平均分是:77

第2個班級的學員成績:

第1個學員的成績是:64

第2個學員的成績是:73

第3個學員的成績是:95

第4個學員的成績是:66

第2個班級的平均分是:74

第3個班級的學員成績:

第1個學員的成績是:35

第2個學員的成績是:73

第3個學員的成績是:83

第4個學員的成績是:94

第3個班級的平均分是:71


優化思考:成績爲0-100分,如何在錄入成績的時候保證不錄入錯誤呢?

分析:寫入判斷,如果輸入的成績大於100或者小於0,那麼就提示錯誤,可以重新對該同學的成績進行輸入。

public staticvoidmain(String[] args) {

       Scannerinput = newScanner(System.in);

       int scores[][] = new int[3][4];

       for (int i = 0; i < 3; i++) {

           for (int j = 0; j < 4; j++) {

              System.out.println("請輸入第"+(i+1)+"個班級的第"+(j+1)+"個同學的成績:");

              scores[j]= input.nextInt();

              if (scores[j] > 100|| scores[j] < 0) {

                  

                  System.out.println("輸入成績無效,成績爲0-100分,請重新輸入");

                  //方法1:通過j--將這次循環記錄刪除,這樣下次循環就會再循環到這個同學的成績輸入

                  j--;

                  //方法2:在沒有跳出循環的情況下再次輸入一次

                  //System.out.println("請輸入第"+(i+1)+"個班級的第"+(j+1)+"個同學的成績:");

                  //scores[j] = input.nextInt();

              }

              

           }

       }

      

       for (int i = 0; i < 3; i++) {

           System.out.println("第"+(i+1)+"個班級同學成績:");

           int sum = 0;

           for (int j = 0; j < 4; j++) {

              System.out.println("第"+(j+1)+"個同學的成績爲:"+scores[j]);

              sum+=scores[j];

           }

           System.out.println("第"+(i+1)+"個班級的平均成績爲:"+(sum/4));

           System.out.println("---------------------------------------------");

       }

    }


簡單java教程例子:

1.猜數遊戲:從鍵盤中任意輸入一個數據,判斷數列中是否包含此數。

   public static void main(String[] args) {

       int num[] ={3,5,7,83,23,64};

       boolean flag = false;

       Scannerscan = newScanner(System.in);

       System.out.println("猜數字遊戲");

       System.out.println("請輸出一個數字:");

       int input = scan.nextInt();

       for (int i = 0; i < num.length; i++) {

           if (num == input) {

              flag= true;

              break;

           }

       }

       if (flag) {

           System.out.println("恭喜您猜對了~");

       }else{

           System.out.println("很遺憾,您猜錯了~");

       }

    }

2.使用字母打印正三角形.

     A

    BBB

   CCCCC

  DDDDDDD

EEEEEEEEE

FFFFFFFFFFF

GGGGGGGGGGGGG

public staticvoidmain(String[] args) {

       char[] sj = {'A','B','C','D','E','F','G'};

       //打印的行數

       for (int i = 0; i < sj.length; i++) {

           //打印每行的空格數量

           for (int j = i; j < sj.length - 1; j++) {

              System.out.print(" ");

           }

           //打印每行的字母數量

           for (int j = 0; j <= i * 2;j++) {

              System.out.print(sj);

           }

           System.out.println();

       }

    }

3.求數組中的最大值最小值。

public staticvoidmain(String[] args) {

       int num[] ={3,29,33,6,90,24,50};

       int max = num[0];

       int min = num[0];

       for (int i = 0; i < num.length; i++) {

           if (num > max) {

              max= num;

           }

           if (num < min) {

              min = num;

           }

       }

       System.out.println("數組中的最大值爲:" + max);

       System.out.println("數組中的最小值爲:" + min);

    }

4.有一串數字:748,520,998,1001,250,512,502,使用冒泡排序分別對其進行由小到大,由大到小的排列起來。

public staticvoidmain(String[] args) {

       int num[] ={748,520,998,1001,250,512,502};

       int temp;

       for (int i = 0; i < num.length - 1; i++) {

           for (int j = 0; j < num.length - 1 - i; j++) {

              if (num[j] > num[j +1]) {//>是從小到大排,<是從大到小排

                  temp= num[j];

                  num[j]= num[j + 1];

                  num[j+ 1] = temp;

              }            

           }         

       }

       System.out.println("積分榜排名爲:");

       for (int i = 0; i < num.length; i++) {

           System.out.print(num + " ");

       }

    }


實際案例應用:

雙色球彩票程序

/**

* 應用案例:模擬雙色球彩票程序

* 實現步驟:

* 1.系統生成一個籃球和6個紅球,並存儲起來

* 2.接受用戶選號,1個籃球和6個紅球

* 3.驗證系統號碼與用戶號碼是否匹配(是否中獎)

* 4.公佈本期中獎號碼

*/

雙色球彩票規則:

一等獎:500萬,1個藍球,6個紅球

二等獎:一等獎的30%,6個紅球

三等獎:3000元,1個藍球,5個紅球

四等獎: 200元,5個紅球或者1個藍球,4個紅球

五等獎:10元,4個紅球或者1個藍球,3個紅球

六等獎:5元,1個藍球

程序代碼如下:

public staticvoidmain(String[] args) {

       int sysBlue;                //系統生成的1個藍球號

       int[] sysRed = new int[6];      //系統生成的6個紅球號

       int userBlue;               //用戶輸入的1個藍球號

       int[] userRed = new int[6];     //用戶輸入的6個紅球號

      

       int blueball = 0;           //正確的藍球個數

       int redball = 0;            //正確的紅球個數

      

       Randomr = newRandom();    //隨機函數

       Scannerinput = newScanner(System.in);//鍵盤輸入

      

       //紅球所有的33個號

       int[] redNum ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32};

      

       //系統隨機在1-16中生成藍球號

       sysBlue= r.nextInt(16)+1;

      

       //隨機生成的紅球號碼

       for (int i = 0; i < sysRed.length; i++) {

           while(true){

              int index = r.nextInt(33);      //隨機生成0-32的下標

              if (redNum[index] != 0) {      

                  sysRed= redNum[index];

                  redNum[index]= 0;

                  break;

              }

           }

       }

      

       System.out.println("雙色球彩票選號開始啦~");

       System.out.println("請選擇籃球號碼(16選1):");

       userBlue= input.nextInt();

       System.out.println("請選擇紅球號碼(33選6):");

       for (int i = 0; i < userRed.length; i++) {

           userRed= input.nextInt();

       }

      

       //驗證籃球和紅球的正確個數

       //---------驗證籃球

       if (userBlue == sysBlue) {

           blueball= 1;

       }

      

       //---------驗證紅球

       for (int i = 0; i < userRed.length; i++) {

           for (int j = 0; j < sysRed.length; j++) {

              if (userRed ==sysRed[j]) {

                  redball++;

                  break;

              }

           }

       }

      

       //判斷是否中獎

       if (blueball == 1&& redball == 6) {

           System.out.println("恭喜你,中了一等獎500萬!");

       }else if(redball == 6){

           System.out.println("恭喜你,中了二等獎");

       }else if(blueball == 1&& redball == 5){

           System.out.println("恭喜你,中了三等獎,3000元");

       }else if(redball == 5 ||(blueball == 1 && redball == 4)){

           System.out.println("恭喜你,中了四等獎,200元");

       }else if(redball == 4 ||(blueball == 1 && redball == 3)){

           System.out.println("恭喜你,中了五等獎,10元");

       }else if(blueball == 1){

           System.out.println("恭喜你,中了六等獎,5元");

       }else{

           System.out.println("很遺憾,您沒有中獎~~繼續加油~~╮(╯▽╰)╭");

       }

      

       //公佈本期中獎號碼

       int temp;

       for (int i = 0; i < sysRed.length-1; i++) {

           for (int j = 0; j < sysRed.length-1-i; j++) {

              if (sysRed[j] >sysRed[j+1]) {

                  temp= sysRed[j];

                  sysRed[j]= sysRed[j+1];

                  sysRed[j+1] = temp;

              }

           }

       }

      

       System.out.println("本期的中獎號碼爲:");

       System.out.println("紅球:");

       for (int i = 0; i < sysRed.length; i++) {

           System.out.println(sysRed+" ");

       }

       System.out.println();

       System.out.print("籃球:" + sysBlue);

    }


有人說JavaSE的意義何在,不就是一個Dos窗口輸出幾個白字而已,在實際開發中也很少用,其實不然,JavaSE是JavaEE的開發的基礎,有好的基礎才能將更深的知識應用自如。


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