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ǎn)單java教程例子:
輸出結(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) 編輯 收藏