各位程序猿,各位攻城獅,各位蜥蜴鷗以及各位棕鯨鯉們~~大家好,我是潘師傅,歡迎大家收看由我為你們帶來的【史上最強(qiáng)JavaSE筆記】系列
,其實(shí)也可以叫【嘻哈JavaSE筆記】的,第一次在博客園發(fā)帖,想想還真是有點(diǎn)小激動(dòng)呢
,各位求支持呀,哈哈,那么回歸正題,我把自己之前學(xué)習(xí)積累的筆記拿出來跟大家分享一下,方便大家更好的理解和復(fù)習(xí),希望能夠?qū)Υ蠹矣兴鶐椭@次發(fā)的是JavaSE方面數(shù)組篇的,內(nèi)容不一定全面哦,歡迎大家前來留言交流哈,不足的地方還望大家多多指出和指導(dǎo)哈~
(由于首次發(fā)文章,布局可能比較亂,不美觀,還望大家多多指導(dǎo))。
1.數(shù)組聲明:第一種:數(shù)據(jù)類型 變量名[],例如:int x[];第二種:數(shù)據(jù)類型[] 變量名=new 數(shù)據(jù)類型[要在內(nèi)存中開辟的空間數(shù)量,例如:int[] x=new int[3];第三種:數(shù)據(jù)類型[] 變量名=new 數(shù)據(jù)類型[]{元素1,元素2,元素3};
例子1: 1 public static void main(String[] arg){ 2 3 //定義一個(gè)字符串?dāng)?shù)組,將各個(gè)元素(也就是月餅)放入其中 4 5 String[]names={"五仁月餅","香辣牛肉月餅","金嗓子月餅","韭菜月餅"}; 6 7 8 9 //通過for循環(huán)遍歷一下數(shù)組,通過輸出語句判斷循環(huán)輸出10 11 //names.length是數(shù)組的長(zhǎng)度,names是輸出數(shù)組下標(biāo)為i的元素名稱12 13 for(int i = 0;i<names.length;i++){14 15 System.out.
輸出結(jié)果:我吃到第1個(gè)月餅是五仁月餅我吃到第2個(gè)月餅是香辣牛肉月餅我吃到第3個(gè)月餅是金嗓子月餅我吃到第4個(gè)月餅是韭菜月餅
2.數(shù)組常見的異常(2種)1.空指針異常(NullPointerException)原因:數(shù)組沒有分配內(nèi)存空間 1 public static void main(String[] args) { 2 3 //空指針異常 4 5 //錯(cuò)誤提示:NullPointerException 6 7 String[]names=null; 8 9 System.out.println(names[1]);10 11 }
輸出結(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)度 1 public static void main(String[] args) { 2 3 //數(shù)組越界異常 4 5 //ArrayIndexOutOfBoundsException 6 7 String[]names={"五仁月餅","香辣牛肉月餅","金嗓子月餅","韭菜月餅"}; 8 9 System.out.println(names[4]);10 11 }
輸出結(jié)果:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:4 ata3.main(a3.java:5)
3.數(shù)組內(nèi)存結(jié)構(gòu)分析棧內(nèi)存和堆內(nèi)存的區(qū)別:數(shù)組內(nèi)存分為棧內(nèi)存和堆內(nèi)存。棧內(nèi)存中是用來存放變量名的,存放確定大小的,存的是一個(gè)內(nèi)存地址,通過它可以從堆內(nèi)存中找到其對(duì)應(yīng)的值,存取速度比堆內(nèi)存快,例如:names堆內(nèi)存中用來存放值的,存放不確定大小的,需要?jiǎng)討B(tài)代碼運(yùn)行到這一句才會(huì)確定大小,例如:"小明"
4.多維數(shù)組習(xí)題:3個(gè)班級(jí)各4名學(xué)員參賽,計(jì)算每個(gè)班的平均成績(jī) 1 public static void main(String[] args) { 2 //創(chuàng)建一個(gè)鍵盤輸入 3 Scannerinput = newScanner(System.in); 4 //定義一個(gè)scores二維數(shù)組,第一個(gè)存班級(jí)數(shù)量,第二個(gè)存學(xué)生數(shù)量 5 int scores[][]=new int[3][4]; 6 //遍歷,將輸入的成績(jī)存入到二維數(shù)組scores中 7 for (int i = 0; i < 3; i++) { 8 for (int j = 0; j < 4; j++) { 9 System.out.println("請(qǐng)輸入第"+(i+1)+"個(gè)班級(jí)的第"+(j+1)+"個(gè)同學(xué)的成績(jī):");10 scores[j]=input.nextInt();11 }12 }13 14 //輸出二位數(shù)組的每個(gè)元素15 for (int i = 0; i < 3; i++) {16 System.out.println("第"+(i+1)+"個(gè)班級(jí)的學(xué)員成績(jī):");17 int sum = 0;18 for (int j = 0; j < 4; j++) {19 System.out.println("第"+(j+1)+"個(gè)學(xué)員的成績(jī)是:"+scores[j]);20 sum+=scores[j];21 }22 System.out.println("第"+(i+1)+"個(gè)班級(jí)的平均分是:"+(sum/4));23 }24 }
輸出結(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ò)誤呢?分析:寫入判斷,如果輸入的成績(jī)大于100或者小于0,那么就提示錯(cuò)誤,可以重新對(duì)該同學(xué)的成績(jī)進(jìn)行輸入。 1 public static void main(String[] args) { 2 Scannerinput = newScanner(System.in); 3 int scores[][] = new int[3][4]; 4 for (int i = 0; i < 3; i++) { 5 for (int j = 0; j < 4; j++) { 6 System.out.println("請(qǐng)輸入第"+(i+1)+"個(gè)班級(jí)的第"+(j+1)+"個(gè)同學(xué)的成績(jī):"); 7 scores[j]= input.nextInt(); 8 if (scores[j] > 100|| scores[j] < 0) { 9 10 System.out.println("輸入成績(jī)無效,成績(jī)?yōu)?-100分,請(qǐng)重新輸入");11 //方法1:通過j--將這次循環(huán)記錄刪除,這樣下次循環(huán)就會(huì)再循環(huán)到這個(gè)同學(xué)的成績(jī)輸入12 j--;13 //方法2:在沒有跳出循環(huán)的情況下再次輸入一次14 //System.out.println("請(qǐng)輸入第"+(i+1)+"個(gè)班級(jí)的第"+(j+1)+"個(gè)同學(xué)的成績(jī):");15 //scores[j] = input.nextInt();16 }17 18 }19 }20 21 for (int i = 0; i < 3; i++) {22 System.out.println("第"+(i+1)+"個(gè)班級(jí)同學(xué)成績(jī):");23 int sum = 0;24 for (int j = 0; j < 4; j++) {25 System.out.println("第"+(j+1)+"個(gè)同學(xué)的成績(jī)?yōu)椋?+scores[j]);26 sum+=scores[j];27 }28 System.out.println("第"+(i+1)+"個(gè)班級(jí)的平均成績(jī)?yōu)椋?+(sum/4));29 System.out.println("---------------------------------------------");30 }31 }
練習(xí)題:1.猜數(shù)游戲:從鍵盤中任意輸入一個(gè)數(shù)據(jù),判斷數(shù)列中是否包含此數(shù)。 1 public static void main(String[] args) { 2 int num[] ={3,5,7,83,23,64}; 3 boolean flag = false; 4 Scannerscan = newScanner(System.in); 5 System.out.println("猜數(shù)字游戲"); 6 System.out.println("請(qǐng)輸出一個(gè)數(shù)字:"); 7 int input = scan.nextInt(); 8 for (int i = 0; i < num.length; i++) { 9 if (num == input) {10 flag= true;11 break;12 }13 }14 if (flag) {15 System.out.println("恭喜您猜對(duì)了~");16 }else{17 System.out.println("很遺憾,您猜錯(cuò)了~");18 }19 }2.使用字母打印正三角形. A BBB CCCCC DDDDDDD EEEEEEEEEFFFFFFFFFFFGGGGGGGGGGGGG 1 public static void main(String[] args) { 2 char[] sj = {'A','B','C','D','E','F','G'}; 3 //打印的行數(shù) 4 for (int i = 0; i < sj.length; i++) { 5 //打印每行的空格數(shù)量 6 for (int j = i; j < sj.length - 1; j++) { 7 System.out.print(" "); 8 } 9 //打印每行的字母數(shù)量10 for (int j = 0; j <= i * 2;j++) {11 System.out.print(sj);12 }13 System.out.println();14 }15 }3.求數(shù)組中的最大值最小值。 1 public static void main(String[] args) { 2 int num[] = { 3, 29, 33, 6, 90, 24, 50 }; 3 int max = num[0]; 4 int min = num[0]; 5 for (int i = 0; i < num.length; i++) { 6 if (num[i] > max) { 7 max = num[i]; 8 } 9 if (num[i] < min) {10 min = num[i];11 }12 }13 System.out.println("數(shù)組中的最大值為:" + max);14 System.out.println("數(shù)組中的最小值為:" + min);15 } 4.有一串?dāng)?shù)字:748,520,998,1001,250,512,502,使用冒泡排序分別對(duì)其進(jìn)行由小到大,由大到小的排列起來。 1 public static void main(String[] args) { 2 int num[] ={748,520,998,1001,250,512,502}; 3 int temp; 4 for (int i = 0; i < num.length - 1; i++) { 5 for (int j = 0; j < num.length - 1 - i; j++) { 6 if (num[j] > num[j +1]) {//>是從小到大排,<是從大到小排 7 temp= num[j]; 8 num[j]= num[j + 1]; 9 num[j+ 1] = temp;10 } 11 } 12 }13 System.out.println("積分榜排名為:");14 for (int i = 0; i < num.length; i++) {15 System.out.print(num + " ");16 }17 }
實(shí)戰(zhàn)應(yīng)用案例:雙色球彩票程序 1 /** 2 * 應(yīng)用案例:模擬雙色球彩票程序 3 * 實(shí)現(xiàn)步驟: 4 * 1.系統(tǒng)生成一個(gè)籃球和6個(gè)紅球,并存儲(chǔ)起來 5 * 2.接受用戶選號(hào),1個(gè)籃球和6個(gè)紅球 6 * 3.驗(yàn)證系統(tǒng)號(hào)碼與用戶號(hào)碼是否匹配(是否中獎(jiǎng)) 7 * 4.公布本期中獎(jiǎng)號(hào)碼 8 */ 9 雙色球彩票規(guī)則: 10 一等獎(jiǎng):500萬,1個(gè)藍(lán)球,6個(gè)紅球 11 二等獎(jiǎng):一等獎(jiǎng)的30%,6個(gè)紅球 12 三等獎(jiǎng):3000元,1個(gè)藍(lán)球,5個(gè)紅球 13 四等獎(jiǎng): 200元,5個(gè)紅球或者1個(gè)藍(lán)球,4個(gè)紅球 14 五等獎(jiǎng):10元,4個(gè)紅球或者1個(gè)藍(lán)球,3個(gè)紅球 15 六等獎(jiǎng):5元,1個(gè)藍(lán)球 16 程序代碼如下: 17 public static void main(String[] args) { 18 int sysBlue; //系統(tǒng)生成的1個(gè)藍(lán)球號(hào) 19 int[] sysRed = new int[6]; //系統(tǒng)生成的6個(gè)紅球號(hào) 20 int userBlue; //用戶輸入的1個(gè)藍(lán)球號(hào) 21 int[] userRed = new int[6]; //用戶輸入的6個(gè)紅球號(hào) 22 23 int blueball = 0; //正確的藍(lán)球個(gè)數(shù) 24 int redball = 0; //正確的紅球個(gè)數(shù) 25 26 Randomr = newRandom(); //隨機(jī)函數(shù) 27 Scannerinput = newScanner(System.in);//鍵盤輸入 28 29 //紅球所有的33個(gè)號(hào) 30 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}; 31 32 //系統(tǒng)隨機(jī)在1-16中生成藍(lán)球號(hào) 33 sysBlue= r.nextInt(16)+1; 34 35 //隨機(jī)生成的紅球號(hào)碼 36 for (int i = 0; i < sysRed.length; i++) { 37 while(true){ 38 int index = r.nextInt(33); //隨機(jī)生成0-32的下標(biāo) 39 if (redNum[index] != 0) { 40 sysRed= redNum[index]; 41 redNum[index]= 0; 42 break; 43 } 44 } 45 } 46 47 System.out.println("雙色球彩票選號(hào)開始啦~"); 48 System.out.println("請(qǐng)選擇籃球號(hào)碼(16選1):"); 49 userBlue= input.nextInt(); 50 System.out.println("請(qǐng)選擇紅球號(hào)碼(33選6):"); 51 for (int i = 0; i < userRed.length; i++) { 52 userRed= input.nextInt(); 53 } 54 55 //驗(yàn)證籃球和紅球的正確個(gè)數(shù) 56 //---------驗(yàn)證籃球 57 if (userBlue == sysBlue) { 58 blueball= 1; 59 } 60 61 //---------驗(yàn)證紅球 62 for (int i = 0; i < userRed.length; i++) { 63 for (int j = 0; j < sysRed.length; j++) { 64 if (userRed ==sysRed[j]) { 65 redball++; 66 break; 67 } 68 } 69 } 70 71 //判斷是否中獎(jiǎng) 72 if (blueball == 1&& redball == 6) { 73 System.out.println("恭喜你,中了一等獎(jiǎng)500萬!"); 74 }else if(redball == 6){ 75 System.out.println("恭喜你,中了二等獎(jiǎng)"); 76 }else if(blueball == 1&& redball == 5){ 77 System.out.println("恭喜你,中了三等獎(jiǎng),3000元"); 78 }else if(redball == 5 ||(blueball == 1 && redball == 4)){ 79 System.out.println("恭喜你,中了四等獎(jiǎng),200元"); 80 }else if(redball == 4 ||(blueball == 1 && redball == 3)){ 81 System.out.println("恭喜你,中了五等獎(jiǎng),10元"); 82 }else if(blueball == 1){ 83 System.out.println("恭喜你,中了六等獎(jiǎng),5元"); 84 }else{ 85 System.out.println("很遺憾,您沒有中獎(jiǎng)~~繼續(xù)加油~~╮(╯▽╰)╭"); 86 } 87 88 //公布本期中獎(jiǎng)號(hào)碼 89 int temp; 90 for (int i = 0; i < sysRed.length-1; i++) { 91 for (int j = 0; j < sysRed.length-1-i; j++) { 92 if (sysRed[j] >sysRed[j+1]) { 93 temp= sysRed[j]; 94 sysRed[j]= sysRed[j+1]; 95 sysRed[j+1] = temp; 96 } 97 } 98 } 99 100 System.out.println("本期的中獎(jiǎng)號(hào)碼為:");101 System.out.println("紅球:");102 for (int i = 0; i < sysRed.length; i++) {103 System.out.println(sysRed+" ");104 }105 System.out.println();106 System.out.print("籃球:" + sysBlue);107 108 }109
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注