ldh8800

          JavaSE數(shù)組詳解與實(shí)戰(zhàn)案例應(yīng)用

          1.數(shù)組聲明:
          第一種:數(shù)據(jù)類(lèi)型 變量名[],例如:int x[];
          第二種:數(shù)據(jù)類(lèi)型[] 變量名=new 數(shù)據(jù)類(lèi)型[要在內(nèi)存中開(kāi)辟的空間數(shù)量,例如:int[] x=new int[3];
          第三種:數(shù)據(jù)類(lèi)型[] 變量名=new 數(shù)據(jù)類(lèi)型[]{元素1,元素2,元素3};

          例子1:
          public staticvoidmain(String[] arg){
                 //定義一個(gè)字符串?dāng)?shù)組,將各個(gè)元素(也就是月餅)放入其中
                 String[]names={"五仁月餅","香辣牛肉月餅","金嗓子月餅","韭菜月餅"};
                
                 //通過(guò)for循環(huán)遍歷一下數(shù)組,通過(guò)輸出語(yǔ)句判斷循環(huán)輸出
                 //names.length是數(shù)組的長(zhǎng)度,names是輸出數(shù)組下標(biāo)為i的元素名稱(chēng)
                 for(int i = 0;i<names.length;i++){
                     System.out.println("我吃到第"+(i+1)+"個(gè)月餅是"+names);
                 }
              }
          輸出結(jié)果:
          我吃到第1個(gè)月餅是五仁月餅
          我吃到第2個(gè)月餅是香辣牛肉月餅
          我吃到第3個(gè)月餅是金嗓子月餅
          我吃到第4個(gè)月餅是韭菜月餅
          2.數(shù)組常見(jiàn)的異常(2種)
          1)空指針異常(NullPointerException)
          原因:數(shù)組沒(méi)有分配內(nèi)存空間
          public staticvoidmain(String[] args) {
                 //空指針異常
                 //錯(cuò)誤提示:NullPointerException
                 String[]names=null;
                 System.out.println(names[1]);
              }
          輸出結(jié)果:
          Exception in thread "main" java.lang.NullPointerException
              ata2.NullPointerException(a2.java:10)
              ata2.main(a2.java:5)
          2)數(shù)組越界異常
          原因:下標(biāo)超出了數(shù)組長(zhǎng)度
          public staticvoidmain(String[] args) {
                 //數(shù)組越界異常
                 //ArrayIndexOutOfBoundsException
                 String[]names={"五仁月餅","香辣牛肉月餅","金嗓子月餅","韭菜月餅"};
                 System.out.println(names[4]);

          3.數(shù)組內(nèi)存結(jié)構(gòu)分析
          棧內(nèi)存和堆內(nèi)存的區(qū)別:
          數(shù)組內(nèi)存分為 棧內(nèi)存 和 堆內(nèi)存。
          棧內(nèi)存 中是用來(lái)存放變量名的,存放確定大小的,存的是一個(gè)內(nèi)存地址,通過(guò)它可以從堆內(nèi)存中找到其對(duì)應(yīng)的值,存取速度比堆內(nèi)存快,例如:names
          堆內(nèi)存 中用來(lái)存放值的,存放不確定大小的,需要?jiǎng)討B(tài)代碼運(yùn)行到這一句才會(huì)確定大小,例如:"小明"

          4.多維數(shù)組
          習(xí)題:3個(gè)班級(jí)各4名學(xué)員參賽,計(jì)算每個(gè)班的平均成績(jī)
          public staticvoidmain(String[] args) {
                 //創(chuàng)建一個(gè)鍵盤(pán)輸入
                 Scannerinput = newScanner(System.in);
                 //定義一個(gè)scores二維數(shù)組,第一個(gè)存班級(jí)數(shù)量,第二個(gè)存學(xué)生數(shù)量
                 int scores[][]=new int[3][4];
                 //遍歷,將輸入的成績(jī)存入到二維數(shù)組scores中
                 for (int i = 0; i < 3; i++) {
                     for (int j = 0; j < 4; j++) {
                        System.out.println("請(qǐng)輸入第"+(i+1)+"個(gè)班級(jí)的第"+(j+1)+"個(gè)同學(xué)的成績(jī):");
                        scores[j]=input.nextInt();
                     }
                 }
                
                 //輸出二位數(shù)組的每個(gè)元素
                 for (int i = 0; i < 3; i++) {
                     System.out.println("第"+(i+1)+"個(gè)班級(jí)的學(xué)員成績(jī):");
                     int sum = 0;
                     for (int j = 0; j < 4; j++) {
                        System.out.println("第"+(j+1)+"個(gè)學(xué)員的成績(jī)是:"+scores[j]);
                        sum+=scores[j];
                     }
                     System.out.println("第"+(i+1)+"個(gè)班級(jí)的平均分是:"+(sum/4));
                 }
              }

          輸出結(jié)果:
          請(qǐng)輸入第1個(gè)班級(jí)的第1個(gè)同學(xué)的成績(jī):
          61
          請(qǐng)輸入第1個(gè)班級(jí)的第2個(gè)同學(xué)的成績(jī):
          71
          請(qǐng)輸入第1個(gè)班級(jí)的第3個(gè)同學(xué)的成績(jī):
          85
          請(qǐng)輸入第1個(gè)班級(jí)的第4個(gè)同學(xué)的成績(jī):
          92
          請(qǐng)輸入第2個(gè)班級(jí)的第1個(gè)同學(xué)的成績(jī):
          64
          請(qǐng)輸入第2個(gè)班級(jí)的第2個(gè)同學(xué)的成績(jī):
          73
          請(qǐng)輸入第2個(gè)班級(jí)的第3個(gè)同學(xué)的成績(jī):
          95
          請(qǐng)輸入第2個(gè)班級(jí)的第4個(gè)同學(xué)的成績(jī):
          66
          請(qǐng)輸入第3個(gè)班級(jí)的第1個(gè)同學(xué)的成績(jī):
          35
          請(qǐng)輸入第3個(gè)班級(jí)的第2個(gè)同學(xué)的成績(jī):
          73
          請(qǐng)輸入第3個(gè)班級(jí)的第3個(gè)同學(xué)的成績(jī):
          83
          請(qǐng)輸入第3個(gè)班級(jí)的第4個(gè)同學(xué)的成績(jī):
          94
          第1個(gè)班級(jí)的學(xué)員成績(jī):
          第1個(gè)學(xué)員的成績(jī)是:61
          第2個(gè)學(xué)員的成績(jī)是:71
          第3個(gè)學(xué)員的成績(jī)是:85
          第4個(gè)學(xué)員的成績(jī)是:92
          第1個(gè)班級(jí)的平均分是:77
          第2個(gè)班級(jí)的學(xué)員成績(jī):
          第1個(gè)學(xué)員的成績(jī)是:64
          第2個(gè)學(xué)員的成績(jī)是:73
          第3個(gè)學(xué)員的成績(jī)是:95
          第4個(gè)學(xué)員的成績(jī)是:66
          第2個(gè)班級(jí)的平均分是:74
          第3個(gè)班級(jí)的學(xué)員成績(jī):
          第1個(gè)學(xué)員的成績(jī)是:35
          第2個(gè)學(xué)員的成績(jī)是:73
          第3個(gè)學(xué)員的成績(jī)是:83
          第4個(gè)學(xué)員的成績(jī)是:94
          第3個(gè)班級(jí)的平均分是:71

          優(yōu)化思考:成績(jī)?yōu)?-100分,如何在錄入成績(jī)的時(shí)候保證不錄入錯(cuò)誤呢?
          分析:寫(xiě)入判斷,如果輸入的成績(jī)大于100或者小于0,那么就提示錯(cuò)誤,可以重新對(duì)該同學(xué)的成績(jī)進(jìn)行輸入。
          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("請(qǐng)輸入第"+(i+1)+"個(gè)班級(jí)的第"+(j+1)+"個(gè)同學(xué)的成績(jī):");
                        scores[j]= input.nextInt();
                        if (scores[j] > 100|| scores[j] < 0) {
                            
                            System.out.println("輸入成績(jī)無(wú)效,成績(jī)?yōu)?-100分,請(qǐng)重新輸入");
                            //方法1:通過(guò)j--將這次循環(huán)記錄刪除,這樣下次循環(huán)就會(huì)再循環(huán)到這個(gè)同學(xué)的成績(jī)輸入
                            j--;
                            //方法2:在沒(méi)有跳出循環(huán)的情況下再次輸入一次
                            //System.out.println("請(qǐng)輸入第"+(i+1)+"個(gè)班級(jí)的第"+(j+1)+"個(gè)同學(xué)的成績(jī):");
                            //scores[j] = input.nextInt();
                        }
                        
                     }
                 }
                
                 for (int i = 0; i < 3; i++) {
                     System.out.println("第"+(i+1)+"個(gè)班級(jí)同學(xué)成績(jī):");
                     int sum = 0;
                     for (int j = 0; j < 4; j++) {
                        System.out.println("第"+(j+1)+"個(gè)同學(xué)的成績(jī)?yōu)椋?+scores[j]);
                        sum+=scores[j];
                     }
                     System.out.println("第"+(i+1)+"個(gè)班級(jí)的平均成績(jī)?yōu)椋?+(sum/4));
                     System.out.println("---------------------------------------------");
                 }
              }

          簡(jiǎn)單java教程例子:
          1.猜數(shù)游戲:從鍵盤(pán)中任意輸入一個(gè)數(shù)據(jù),判斷數(shù)列中是否包含此數(shù)。
             public static void main(String[] args) {
                 int num[] ={3,5,7,83,23,64};
                 boolean flag = false;
                 Scannerscan = newScanner(System.in);
                 System.out.println("猜數(shù)字游戲");
                 System.out.println("請(qǐng)輸出一個(gè)數(shù)字:");
                 int input = scan.nextInt();
                 for (int i = 0; i < num.length; i++) {
                     if (num == input) {
                        flag= true;
                        break;
                     }
                 }
                 if (flag) {
                     System.out.println("恭喜您猜對(duì)了~");
                 }else{
                     System.out.println("很遺憾,您猜錯(cuò)了~");
                 }
              }
          2.使用字母打印正三角形.
               A
              BBB
             CCCCC
            DDDDDDD
          EEEEEEEEE
          FFFFFFFFFFF
          GGGGGGGGGGGGG
          public staticvoidmain(String[] args) {
                 char[] sj = {'A','B','C','D','E','F','G'};
                 //打印的行數(shù)
                 for (int i = 0; i < sj.length; i++) {
                     //打印每行的空格數(shù)量
                     for (int j = i; j < sj.length - 1; j++) {
                        System.out.print(" ");
                     }
                     //打印每行的字母數(shù)量
                     for (int j = 0; j <= i * 2;j++) {
                        System.out.print(sj);
                     }
                     System.out.println();
                 }
              }
          3.求數(shù)組中的最大值最小值。
          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("數(shù)組中的最大值為:" + max);
                 System.out.println("數(shù)組中的最小值為:" + min);
              }
          4.有一串?dāng)?shù)字:748,520,998,1001,250,512,502,使用冒泡排序分別對(duì)其進(jìn)行由小到大,由大到小的排列起來(lái)。
          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 + " ");
                 }
              }

          實(shí)際案例應(yīng)用:
          雙色球彩票程序
          /**
          * 應(yīng)用案例:模擬雙色球彩票程序
          * 實(shí)現(xiàn)步驟:
          * 1.系統(tǒng)生成一個(gè)籃球和6個(gè)紅球,并存儲(chǔ)起來(lái)
          * 2.接受用戶選號(hào),1個(gè)籃球和6個(gè)紅球
          * 3.驗(yàn)證系統(tǒng)號(hào)碼與用戶號(hào)碼是否匹配(是否中獎(jiǎng))
          * 4.公布本期中獎(jiǎng)號(hào)碼
          */
          雙色球彩票規(guī)則:
          一等獎(jiǎng):500萬(wàn),1個(gè)藍(lán)球,6個(gè)紅球
          二等獎(jiǎng):一等獎(jiǎng)的30%,6個(gè)紅球
          三等獎(jiǎng):3000元,1個(gè)藍(lán)球,5個(gè)紅球
          四等獎(jiǎng): 200元,5個(gè)紅球或者1個(gè)藍(lán)球,4個(gè)紅球
          五等獎(jiǎng):10元,4個(gè)紅球或者1個(gè)藍(lán)球,3個(gè)紅球
          六等獎(jiǎng):5元,1個(gè)藍(lán)球
          程序代碼如下:
          public staticvoidmain(String[] args) {
                 int sysBlue;                //系統(tǒng)生成的1個(gè)藍(lán)球號(hào)
                 int[] sysRed = new int[6];      //系統(tǒng)生成的6個(gè)紅球號(hào)
                 int userBlue;               //用戶輸入的1個(gè)藍(lán)球號(hào)
                 int[] userRed = new int[6];     //用戶輸入的6個(gè)紅球號(hào)
                
                 int blueball = 0;           //正確的藍(lán)球個(gè)數(shù)
                 int redball = 0;            //正確的紅球個(gè)數(shù)
                
                 Randomr = newRandom();    //隨機(jī)函數(shù)
                 Scannerinput = newScanner(System.in);//鍵盤(pán)輸入
                
                 //紅球所有的33個(gè)號(hào)
                 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};
                
                 //系統(tǒng)隨機(jī)在1-16中生成藍(lán)球號(hào)
                 sysBlue= r.nextInt(16)+1;
                
                 //隨機(jī)生成的紅球號(hào)碼
                 for (int i = 0; i < sysRed.length; i++) {
                     while(true){
                        int index = r.nextInt(33);      //隨機(jī)生成0-32的下標(biāo)
                        if (redNum[index] != 0) {      
                            sysRed= redNum[index];
                            redNum[index]= 0;
                            break;
                        }
                     }
                 }
                
                 System.out.println("雙色球彩票選號(hào)開(kāi)始啦~");
                 System.out.println("請(qǐng)選擇籃球號(hào)碼(16選1):");
                 userBlue= input.nextInt();
                 System.out.println("請(qǐng)選擇紅球號(hào)碼(33選6):");
                 for (int i = 0; i < userRed.length; i++) {
                     userRed= input.nextInt();
                 }
                
                 //驗(yàn)證籃球和紅球的正確個(gè)數(shù)
                 //---------驗(yàn)證籃球
                 if (userBlue == sysBlue) {
                     blueball= 1;
                 }
                
                 //---------驗(yàn)證紅球
                 for (int i = 0; i < userRed.length; i++) {
                     for (int j = 0; j < sysRed.length; j++) {
                        if (userRed ==sysRed[j]) {
                            redball++;
                            break;
                        }
                     }
                 }
                
                 //判斷是否中獎(jiǎng)
                 if (blueball == 1&& redball == 6) {
                     System.out.println("恭喜你,中了一等獎(jiǎng)500萬(wàn)!");
                 }else if(redball == 6){
                     System.out.println("恭喜你,中了二等獎(jiǎng)");
                 }else if(blueball == 1&& redball == 5){
                     System.out.println("恭喜你,中了三等獎(jiǎng),3000元");
                 }else if(redball == 5 ||(blueball == 1 && redball == 4)){
                     System.out.println("恭喜你,中了四等獎(jiǎng),200元");
                 }else if(redball == 4 ||(blueball == 1 && redball == 3)){
                     System.out.println("恭喜你,中了五等獎(jiǎng),10元");
                 }else if(blueball == 1){
                     System.out.println("恭喜你,中了六等獎(jiǎng),5元");
                 }else{
                     System.out.println("很遺憾,您沒(méi)有中獎(jiǎng)~~繼續(xù)加油~~╮(╯▽╰)╭");
                 }
                
                 //公布本期中獎(jiǎng)號(hào)碼
                 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("本期的中獎(jiǎng)號(hào)碼為:");
                 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 快樂(lè)客 閱讀(35) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          留言簿

          文章檔案

          搜索

          最新評(píng)論

          主站蜘蛛池模板: 伊宁县| 双辽市| 天等县| 宽甸| 修文县| 石楼县| 龙门县| 宿州市| 茂名市| 昌吉市| 泽普县| 嵊州市| 海口市| 永川市| 望城县| 鹤壁市| 九江县| 松原市| 漾濞| 迁西县| 司法| 布尔津县| 金华市| 凤台县| 靖边县| 淅川县| 巨鹿县| 晋宁县| 虹口区| 榆中县| 忻州市| 罗源县| 麟游县| 嫩江县| 遂宁市| 乌兰县| 霸州市| 科尔| 迁西县| 嘉定区| 华安县|