Java程序設計基礎筆記 • 【第10章 數組】

本章目錄

10.1 數組概述

10.1.1 數組優勢

10.1.2 Java中的數組

10.1.3 數組的分類

10.2 一維數組

10.2.1 數組的定義和使用

10.2.2 數組的使用案例

10.2.3 實踐練習

10.3 數組的應用(一)

10.3.1 遍歷數組元素

10.3.2 增強型for循環與數組的遍歷

10.3.2 foreach循環

10.4 數組的應用(二)

10.4.1 求最大值和最小值

10.4.2 數組的排序

10.4.3 實踐練習

總結:


10.1 數組概述

10.1.1 數組優勢

超市的入口處,擺放着許多的電子儲物櫃,每個電子儲物櫃均由若干個儲物箱構成,用於存放不同顧客的物品。

10.1.2 Java中的數組

數組是一個變量,用於將相同數據類型的數據存儲在內存空間中,數組中的所有元素必須屬於相同的數據類型。

數組爲了在內存中能夠存取多個數據更加方便,在設計數組時,數組的結構和基本要素都與生活中的電子儲物櫃非常類似。

數組的特點:

一個數組中的數組元素必須具有相同的數據類型,且在內存中連續分佈。

無論數組中包含多少個數組元素,該數組只存在一個名稱,即數組名。

數組元素的編號稱爲下標,數組的下標從0 開始

可以通過“數組名[ 下標]”的方式訪問數組中的任何元素。

數組的長度指數組可以存儲元素的最大個數,在創建數組時確定

10.1.3 數組的分類

Java語言中,存在多種形式的數組。

維數

多維數組

交錯數組

10.2 一維數組

10.2.1 數組的定義和使用

Java語言,一維數組的使用類似於變量的使用,分爲以下4步驟

  1. 聲明數組
  2. 創建數組
  3. 初始化數組
  4. 引用數組元素

(1)聲明數組:聲明數組是使用數組的第一步,需要說明數組元素的類型以及數組的名稱。

語法:

數據類型 [] 數組名 ; 或數據類型 數組名 [];

示例:

int[] age;   // 用於存儲年齡

String names[]; // 用於存儲姓名

注意:

“[]”不能省略,且必須出現在數據類型與數組名之間。

在聲明數組時,不能給定數組的長度。例如:“int [20] age;  //錯誤”。

在Java中聲明數組時,中括號可以放在數組名前後,一般我們習慣將中括號寫在數據類型後。

(2)創建數組:在Java語言中,可以通過new 關鍵字創建數組,爲數組分配內存空間

語法:

數組名 = new 數據類型[數組長度];

示例:age = new int[10];

當然,也可以一步完成數組的聲明與創建:

數據類型[] 數組名 = new 數據類型[數組長度];

示例:int[] age = new int[10];

(3)初始化數組: 在Java語言中,可以通過new 關鍵字創建數組,爲數組分配內存空間

創建後初始化:

int[] age = new int[10];
for (int i = 0; i < 10; i++)
{
    age[i] = sc.nextInt();
}

創建時初始化:

int[] age = {17,16,18,21,24,22,21,19,20,17};
int[] age = new int[]{17,16,18,21,24,22,21,19,20,17};

默認值初始化:

數據類型

默認值

int     

0

float      

0.0f

double      

0.0

boolean        

false

char

‘\0’

(4)引用數組元素:

可以通過以下方式對數組中的元素進行存取(下標越界將會出現的錯誤

語法:

數組名[下標]

數組可以使用length 屬性在程序中動態獲得數組的長度。

語法:

數組名.length

數組中第一個元素的下標:0

最後一個元素的下標:數組名.length-1

 

10.2.2 數組的使用案例

示例:輸入本部門5位員工的薪資,並根據用戶輸入的序號爲指定員工進行提薪。若用戶輸入序號出現越界,則提示錯誤。要求:薪資的漲幅不能超過原薪資的20%,若漲幅超過20%,則按照原薪資的20%進行提

注意:

在程序中涉及到數組長度時,不建議直接使用數值常量5,而使用數組的length 屬性動態獲取數組長度。

當用戶輸入員工序號時,員工序號是1~5,而對應的數組元素下標是0~4,因此,對應數組元素的下標= 用戶輸入的員工序號-1。

import java.util.Scanner;

public class EmpSalaryDemo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//使用數組儲存5位員工的薪資
		int[] salary = new int[5];
		//用戶輸入的索引
		int index;
		//用戶輸入提升的薪資
		int money;
		//使用循環對數組中的每個元素進行賦值
		System.out.println("請輸入5位員工的薪資:");
		for(int i = 0; i < salary.length; i++) {
			salary[i] = sc.nextInt();
		}
		//用戶輸入的員工序號:1~5,而數組的中的下標:0~4
		//員工序號-1:對應成績在數組中的下標
		System.out.println("請輸入需要提薪的員工序號:");
		index = sc.nextInt()-1;
		System.out.println("請輸入所提薪資:");
		money = sc.nextInt();
		//判斷用戶輸入索引是否越界(0 ~ 長度 ~ -1)
		if(index < 0 ||index > salary.length - 1) {
			//出現下標越界,提示錯誤
			System.out.println("輸入的員工序號不存在,操作失敗!");
		}else {
			//實現提薪的操作
			//原工資的%20
			int temp = (int)(salary[index]*0.2);
			//若漲幅超過%20,則按照20%漲幅進行提薪
			//否則按照實際輸入的薪資進行提薪
			if(money > temp) {
				money = temp;
				salary[index] += money;
			}
			System.out.println("提薪後工資:"+salary[index]);
		}
	}
}

10.2.3 實踐練習

 

10.3 數組的應用(一)

10.3.1 遍歷數組元素

示例:編寫JAVA程序,輸入本部門五位員工的姓名和薪資,輸出五位員工的姓名以及年薪。

分析:

  1. 需要在程序中存儲五位員工的姓名和薪資,由於數據類型的不同,因此,需要定義兩個數組分別存儲員工姓名和薪資。
  2. 每個數組都存在下標,可限定兩個數組中同一下標處數據描述同一個員工

//使用數組存儲五位員工的姓名和薪資
String[] name = new String[5];
int[] salary = new int[5];
//使用循環對數組中的每個元素進行賦值
for (int i = 0; i < salary.length; i++) {
	System.out.printf("第%d位員工信息:\n", i + 1);
	System.out.print("姓名:");
	name[i] = sc.next();
	System.out.print("薪資:");
	salary[i] = sc.nextInt();
}
//遍歷所有數組元素,輸出薪資以及年薪
System.out.println("姓名\t薪資\t年薪");
for (int i = 0; i < salary.length; i++) {
	System.out.printf("%s\t%d\t%d\n", name[i], salary[i], 12 * salary[i]);
}

10.3.2 增強型for循環與數組的遍歷

爲簡化對數組的遍歷操作,提高數組遍歷的效率,Java提供了增強型的for循環,該循環專用於數組或集合的遍歷操作。

語法:

for(數據類型 變量:數組) {

    //循環體

}

數據與數組類型一致

循環變量爲只讀,在循環體中不能修改

10.3.2 foreach循環

示例:使用增強型for循環遍歷一維數組

int nums[] = {1,2,3,4,5,6};
for(int num : nums) {
	System.out.println(num);
}

注意:在增強型for循環的循環體中,只能依次獲取數組中元素的值,不能對數組元素的值進行修改。

示例:修改示例,使用增強 for 循環實現數據的遍歷。

 // 遍歷所有數組元素
 // 輸出姓名
System.out.print(" 姓名 \t");
for (String item : name) {
	System.out.print(item + "\t");
}
System.out.println();
// 輸出薪資
System.out.print(" 薪資 \t");
for (int item : salary) {
	System.out.print(item + "\t");
      }
System.out.println();
// 計算年薪並輸出
System.out.print(" 年薪 \t");
for (int item : salary) {
	System.out.print(12 * item + "\t");
}

10.3.3 實踐練習

 

10.4 數組的應用(二)

10.4.1 求最大值和最小值

以求最大值爲例,最大值即一組數據中最大的值。

首先,第一個上擂臺的人是擂主,然後與下一個競爭對手進行比武,若取勝,則第一個人仍是擂主,否則,競爭對手便成爲擂主,然後擂主繼續與之後的競爭對手進行比武,以此類推,最後站在擂臺上的擂主,便是本次比武的勝利者。

示例:

//定義數組,存儲用戶輸入的成績
int[] scores = new int[5];
//聲明變量,存儲最高成績
int max;
//通過循環對數組進行賦值
System.out.println("請輸入五位同學的成績:");
for (int i = 0; i < scores.length; i++) {
	scores[i] = sc.nextInt();
}
//求解最大值
//將數組第一個元素直接賦值max
max = scores[0];
//數組其餘元素與max進行比較,將較大值賦值給max
for (int i = 1; i < scores.length; i++) {
	if (scores[i] > max)
		max = scores[i];
	}
//輸出比較結果
System.out.println("最高成績:" + max);

示例:求最小值的過程與最大值類似,添加代碼實現求最小值。

//求解最大值
//將數組第一個元素直接賦值max
max = scores[0];
min = scores[0];
//數組其餘元素與max進行比較,將較大值賦值給max
for (int i = 1; i < scores.length; i++) {
	if (scores[i] > max)
		max = scores[i];
	if (scores[i] < min)
		min = scores[i];
}
System.out.println("最高成績:" + max + ",最低成績:" + min);

10.4.2 數組的排序

示例:在Java中,通過Arrays.sort()方法可以快速實現數組元素的排序(默認按升序排列)

//定義數組,存儲用戶輸入的成績
int[] scores = new int[5];
//通過循環對數組進行賦值
System.out.println("請輸入五位同學的成績:");
for (int i = 0; i < scores.length; i++) {
	scores[i] = sc.nextInt();
}
//對數組元素進行排序
Arrays.sort(scores);
//輸出排序結果
System.out.println("成績由低到高:");
for (int item : scores) {
	System.out.println(item);
}

示例:當需要實現數組中數據的降序排序時,先使用Arrays.sort()升序排序,再將數組的前半部分和後半部分交換即可。

//scores爲已經升序排序的數組
//翻轉數組,循環次數爲數組長度的一半,如長度是6則只需要交換3次即可。
for (int i = 0; i < scores.length / 2; i++) {
	//將數組元素位置顛倒,如0和最後一位,1和倒數第二位
	int temp = scores[i];
	// scores.length -i -1 可以獲取到當前I下標需要交換的下標
	//例如,0下標和最後一位的下標,1下標和數組長度減1再減去I下標
	scores[i] = scores[scores.length - i - 1];
	scores[scores.length - i - 1] = temp;
}
System.out.println("成績由高到低:");
for (int item : scores) {
	System.out.println(item);
}

10.4.3 實踐練習

 

總結:

  1.  數組是指將具有相同類型的若干變量按照有序的形式組織起來
  2.  數組中存儲的數據稱爲數組元素,同一個數組中數組元素必須具有相同的數據類型,且在內存中連續分佈
  3.  數組元素按順序進行存儲和編號,數組元素的編號稱爲下標,數組的下標從0開始。
  4.  數組元素均存在下標,可以通過“數組名[下標]”的方式訪問數組中的任何元素。
  5.  數組的使用類似於變量的使用,其步驟分爲:聲明數組、創建數組、初始化數組和引用數組。
  6.  增強型for循環主要用於遍歷數組或集合,循環變量不能被重新賦值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章