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的開發的基礎,有好的基礎才能將更深的知識應用自如。