1.1.1 數(shù)組的元素訪問
1.1.1.1案例代碼
package com.itheima_01;
/*
* 數(shù)組:存儲(chǔ)同一種數(shù)據(jù)類型的多個(gè)元素的容器怔蚌。
*
* 定義格式:
* A:數(shù)據(jù)類型[] 數(shù)組名;
* B:數(shù)據(jù)類型 數(shù)組名[];
* 舉例:
* A:int[] a; 定義一個(gè)int類型的數(shù)組蔗坯,數(shù)組名是a
* B:int a[]; 定義一個(gè)int類型的變量束昵,變量名是a數(shù)組
*
* 數(shù)組初始化:
* A:所謂初始化杏瞻,就是為數(shù)組開辟內(nèi)存空間,并為數(shù)組中的每個(gè)元素賦予初始值
* B:我們有兩種方式對(duì)數(shù)組進(jìn)行初始化
* a:動(dòng)態(tài)初始化 只指定長(zhǎng)度黄橘,由系統(tǒng)給出初始化值
* b:靜態(tài)初始化 給出初始化值碱鳞,由系統(tǒng)決定長(zhǎng)度
*
* 動(dòng)態(tài)初始化:
* 數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組長(zhǎng)度];
*/
public class ArrayDemo {
public static void main(String[] args) {
//數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組長(zhǎng)度];
int[] arr = new int[3];
/*
* 左邊:
* int:說明數(shù)組中的元素的數(shù)據(jù)類型是int類型
* []:說明這是一個(gè)數(shù)組
* arr:是數(shù)組的名稱
* 右邊:
* new:為數(shù)組分配內(nèi)存空間
* int:說明數(shù)組中的元素的數(shù)據(jù)類型是int類型
* []:說明這是一個(gè)數(shù)組
* 3:數(shù)組的長(zhǎng)度勃黍,其實(shí)就是數(shù)組中的元素個(gè)數(shù)
*/`
System.out.println(arr); //[I@3fa5ac,地址值
//我們獲取到地址值沒有意義,我要的是數(shù)組中的數(shù)據(jù)值娜氏,該怎么辦呢?
//不用擔(dān)心拳缠,java已經(jīng)幫你想好了
//其實(shí)數(shù)組中的每個(gè)元素都是有編號(hào)的,編號(hào)是從0開始的牍白,最大的編號(hào)就是數(shù)組的長(zhǎng)度-1
//用數(shù)組名和編號(hào)的配合我們就可以獲取數(shù)組中的指定編號(hào)的元素
//這個(gè)編號(hào)的專業(yè)叫法:索引
//格式:數(shù)組名[編號(hào)] -- 數(shù)組名[索引]
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
1.1.2 數(shù)組操作的兩個(gè)常見小問題
1.1.2.1 案例代碼
package com.itheima_04;
/*
* 兩個(gè)常見小問題:
* ArrayIndexOutOfBoundsException:數(shù)組索引越界異常
* 如何產(chǎn)生的呢?我們?cè)L問了不存在的索引脊凰。
*
* NullPointerException:空指針異常
* 如何產(chǎn)生的呢?null是指不再指向堆內(nèi)存的數(shù)據(jù),而我們還在訪問堆內(nèi)存的數(shù)據(jù)
*/
public class ArrayDemo {
public static void main(String[] args) {
//定義數(shù)組
int[] arr = {1,2,3};
//訪問數(shù)組中的元素
//System.out.println(arr[3]);
//引用數(shù)據(jù)類型:類,接口狸涌,數(shù)組
//常量:null切省,它是可以賦值給引用數(shù)據(jù)類型的,表示該引用不再指向堆內(nèi)存的數(shù)據(jù)
arr = null;
System.out.println(arr[1]);
}
}
1.1.3 數(shù)組操作之遍歷數(shù)組
1.1.3.1案例代碼
package com.itheima;
/*
* 需求:數(shù)組遍歷(依次輸出數(shù)組中的每一個(gè)元素)
*/
public class ArrayOperatorDemo {
public static void main(String[] args) {
//定義一個(gè)數(shù)組
int[] arr = {11,22,33,44,55};
//原始做法
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
System.out.println("------------------");
//用循環(huán)改進(jìn)代碼
//用for循環(huán)獲取到數(shù)據(jù)0-4
for(int x=0; x<5; x++) {
System.out.println(arr[x]);
}
System.out.println("------------------");
//為了解決我們?nèi)?shù)數(shù)組中的元素個(gè)數(shù)問題帕胆,數(shù)組就提供了一個(gè)屬性:length
//用于獲取數(shù)組中的元素個(gè)數(shù)
//使用格式:數(shù)組名.length
System.out.println("arr數(shù)組共有"+arr.length+"個(gè)元素");
System.out.println("------------------");
//數(shù)組遍歷的標(biāo)準(zhǔn)版代碼
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
}
}
1.1.4 數(shù)組操作之獲取最值
1.1.4.1案例代碼
package com.itheima_03;
/*
* 需求:數(shù)組獲取最值(獲取數(shù)組中的最大值最小值)
*/
public class ArrayTest2 {
public static void main(String[] args) {
//定義數(shù)組
int[] arr = {12,98,45,73,60};
//定義參照物
int max = arr[0];
//遍歷數(shù)組朝捆,獲取除了0以外的所有元素,進(jìn)行比較
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
System.out.println("數(shù)組中的最大值是:"+max);
}
}
1.1.5數(shù)組練習(xí)之評(píng)委打分
1.1.5.1案例代碼
package com.itheima;
import java.util.Scanner;
/*
* 需求:在編程競(jìng)賽中懒豹,有6個(gè)評(píng)委為參賽的選手打分芙盘,分?jǐn)?shù)為0-100的整數(shù)分。
* 選手的最后得分為:去掉一個(gè)最高分和一個(gè)最低分后 的4個(gè)評(píng)委平均值脸秽。
* 請(qǐng)寫代碼實(shí)現(xiàn)儒老。(不考慮小數(shù)部分)
*
* 分析:
* A:定義一個(gè)長(zhǎng)度為6的數(shù)組
* B:評(píng)委打分的數(shù)據(jù)采用鍵盤錄入實(shí)現(xiàn)
* C:寫代碼獲取數(shù)組的最大值(最高分)
* D:寫代碼獲取數(shù)組的最小值(最低分)
* E:寫代碼求數(shù)組中的元素和(總分)
* F:平均分:(總分-最高分-最低分)/(arr.length-2)
* G:輸出平均分即可
*/
public class ArrayTest {
public static void main(String[] args) {
//定義一個(gè)長(zhǎng)度為6的數(shù)組
int[] arr = new int[6];
//評(píng)委打分的數(shù)據(jù)采用鍵盤錄入實(shí)現(xiàn)
Scanner sc = new Scanner(System.in);
for(int x=0; x<arr.length; x++) {
System.out.println("請(qǐng)輸入第"+(x+1)+"個(gè)評(píng)委給出的分?jǐn)?shù):");
int score = sc.nextInt();
arr[x] = score;
}
//寫代碼獲取數(shù)組的最大值(最高分)
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
//寫代碼獲取數(shù)組的最小值(最低分)
int min = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] < min) {
min = arr[x];
}
}
//寫代碼求數(shù)組中的元素和(總分)
int sum = 0;
for(int x=0; x<arr.length; x++) {
sum += arr[x];
}
//平均分:(總分-最高分-最低分)/(arr.length-2)
int avg = (sum - max - min)/(arr.length-2);
//輸出平均分即可
System.out.println("該選手的最終得分是:"+avg);
}
}
1.1.6數(shù)組練習(xí)之不死神兔
1.1.6.1案例代碼
package com.itheima;
/*
* 需求:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子记餐,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔子驮樊,
* 假如兔子都不死,問第二十個(gè)月的兔子對(duì)數(shù)為多少片酝?
*
* 規(guī)律:
* 第一個(gè)月:1
* 第二個(gè)月:1
* 第三個(gè)月:2
* 第四個(gè)月:3
* 第五個(gè)月:5
* ...
*
* 從第三個(gè)月開始囚衔,每個(gè)月的兔子對(duì)數(shù)是前兩個(gè)月的兔子對(duì)數(shù)之和
* 第一個(gè)月和第二個(gè)月的兔子對(duì)數(shù)都是1
*
* 分析:
* A:由于數(shù)據(jù)比較多,所以我們定義數(shù)組實(shí)現(xiàn)
* int[] arr = new int[20];
* B:給數(shù)組中的元素賦值
* arr[0] = 1;
* arr[1] = 1;
* C:從第三個(gè)月開始雕沿,根據(jù)規(guī)律賦值
* arr[2] = arr[1] + arr[0];
* arr[3] = arr[2] + arr[1];
* arr[4] = arr[3] + arr[2];
* ...
* D:輸出第二十個(gè)月的兔子對(duì)數(shù)练湿,其實(shí)就是輸出arr[19]
*/
public class ArrayTest2 {
public static void main(String[] args) {
//定義數(shù)組
int[] arr = new int[20];
//給數(shù)組中的元素賦值
arr[0] = 1;
arr[1] = 1;
//從第三個(gè)月開始,根據(jù)規(guī)律賦值
for(int x=2; x<arr.length; x++) {
arr[x] = arr[x-1] + arr[x-2];
}
//輸出第二十個(gè)月的兔子對(duì)數(shù)审轮,其實(shí)就是輸出arr[19]
System.out.println("第二十個(gè)月的兔子對(duì)數(shù)是:"+arr[19]);
}
}