ldh8800

          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);
              }

          posted on 2015-05-16 00:50 快樂客 閱讀(36) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          留言簿

          文章檔案

          搜索

          最新評論

          主站蜘蛛池模板: 阿坝县| 班戈县| 无为县| 永德县| 泾源县| 喜德县| 玉林市| 洛宁县| 孟连| 泰州市| 民县| 荥经县| 丰宁| 阜新市| 安阳县| 彝良县| 云龙县| 五家渠市| 富川| 丁青县| 开阳县| 荣成市| 夏津县| 云霄县| 五大连池市| 麻城市| 伊川县| 巴马| 英德市| 庆云县| 丘北县| 土默特右旗| 尚义县| 河池市| 太湖县| 扶风县| 垣曲县| 通化县| 哈尔滨市| 凤冈县| 日土县|