數組
1.數組的概念
數組是相同類型資料的集合。
其中,每一個資料稱作一個數組元素,每個數組元素可以通過一個下标來通路他們。
2.數組的建立
數組的建立可分為靜态初始化和動态初始化
靜态初始化:在程式運作前就能确定數組的大小和數組中的初始資料
文法:
資料類型[] 數組名(變量名/對象名) = {元素1,元素2....};
或
資料類型[] 數組名(變量名/對象名) = new 資料類型[]{元素1,元素2....}
動态初始化:數組的大小或數組中資料在程式運作時才能決定
文法:
資料類型[] 數組名(變量名/對象名) = new 資料類型[數組長度];
或
資料類型[] 數組名(變量名/對象名);//先聲明變量
數組名 = new 資料類型[length];//建立數組并指派
//注:數組名 = {元素1,元素2....}; 不能這樣寫
注意:
- 數組下标(從0開始)超出數組長度,數組越界異常(運作時異常)
- 數組中每個元素都有預設值,預設值是該資料類型預設值
- 數組名稱.length(屬性):取得數組長度
3.關于數組使用上的例子
例題1
/**
* @标題: 章節5
* @項目名 例題1
* @項目描述: 建立一個int型數組并指派,然後輸出它每一個元素。
* @建立人 yaojiawen
* @建立時間 2021/4/1418:59
*/
public class LiTi1 {
public static void main(String[] args) {
int[] num = new int[3];
num[0] = 1;
num[2] = 2;
for (int i = 0; i < 3; i++) {
System.out.println(num[i]);
}
}
}
例題2
/**
* @标題: 章節5
* @項目名 例題2
* @項目描述: 建立一個數組int[] num={4,1,2},然後在其中找出最大的值并輸出。
* @建立人 yaojiawen
* @建立時間 2021/4/1419:12
*/
public class LiTi2 {
public static void main(String[] args) {
int[] num = {4, 1, 2};
int max = num[0];
for (int i = 0; i < num.length; i++) {
if (num[i] > max) max = num[i];
}
System.out.println("最大值為:" + max);
}
}
4.關于數組操作的常用方法(Arrays)
是在java.util.*包下,需要導包。主要的功能是操作數組(元素)
toString(數組名稱) 将數組元素轉換成字元串進行操作
equals(數組1,數組2) 比較兩個數組是否一相同
sort(數組名稱) 對數組進行升序排序
5.常用的幾個排序方法
冒泡排序
原理:将相鄰的兩個元素進行比較,最大的值放在右端。
過程:N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i)次,是以可以用雙重循環語句,外層控制循環多少趟,内層控制每一趟的循環次數。
import java.util.Arrays;
/**
* @标題: 章節5
* @項目名 例題3
* @項目描述: 對數組int[] num={4,1,6,3};用冒泡排序法進行升序排序。
* @建立人 yaojiawen
* @建立時間 2021/4/1419:39
*/
public class LiTi3 {
public static void main(String[] args) {
int[] num = {4, 1, 6, 3};
for (int a = 1; a < num.length; a++) {
for (int b = 0; b < num.length - a; b++) {
if (num[b] > num[b + 1]) {
int c = num[b];
num[b] = num[b + 1];
num[b + 1] = c;
}
}
}
System.out.println(Arrays.toString(num));
}
}
選擇排序
原理:每一趟從待排序的資料元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。
過程:
1.首先從原始數組中選擇最小的1個資料,将其和位于第1個位置的資料交換。
2.接着從剩下的n-1個資料中選擇次小的1個元素,将其和第2個位置的資料交換
3.然後,這樣不斷重複,直到最後兩個資料完成交換。最後,便完成了對原始數組的從小到大的排序。
import java.util.Arrays;
/**
* @标題: 章節5
* @項目名 例題4
* @項目描述: 對數組int[] num={4,1,6,3};用選擇排序法進行升序排序。
* @建立人 yaojiawen
* @建立時間 2021/4/1419:39
*/
public class LiTi4 {
public static void main(String[] args) {
int[] num = {4, 1, 6, 3};
for (int a = 0; a < num.length; a++) {
for (int b = a + 1; b < num.length; b++) {
if (num[a] > num[b]) {
int c = num[a];
num[a] = num[b];
num[b] = c;
}
}
}
System.out.println(Arrays.toString(num));
}
}
插入排序
原理:每一步将一個待排序的資料插入到前面已經排好序的有序序列中,直到插完所有元素為止。
過程:
1.确定插入排序的數,一般從第二個開始選擇
2.從第二個數開始,拿出第二個數進行向前插入排序,一直到拿到最後一個數向前做插入排序
3.每次将選擇作為插入的數與前面比較,如果小于則前面的數往後移動一位,否則插入到這個位置
import java.util.Arrays;
/**
* @标題: 章節5
* @項目名 例題5
* @項目描述: 對數組int[] num={4,1,6,3};用選擇排序法進行升序排序。
* @建立人 yaojiawen
* @建立時間 2021/4/1513:44
*/
public class LiTi5 {
public static void main(String[] args) {
int[] num = {4, 1, 6, 3};
for (int a = 1; a < num.length; a++) {
int jiaoHuan = num[a];
int shuLie = a - 1;
while (shuLie >= 0 && num[shuLie] > jiaoHuan) {
num[shuLie + 1] = num[shuLie];
shuLie--;
}
num[shuLie + 1] = jiaoHuan;
}
System.out.println(Arrays.toString(num));
}
}
6.二維數組
二維數組的元素是一維數組。
二維數組的建立
1. 資料類型[][] 數組名 = new 資料類型[len1][len2];//初始化數組
len1: 二維數組的元素個數(有len1個一維數組)
len2: 限定一維數組的元素個數
2. 資料類型[][] 數組名 = new 資料類型[len1][];
len1: 二維數組的元素個數(有len1個一維數組)
3.資料類型[][] 數組名 = {{1},{1,2},{1,2,3}};
4.資料類型[][] 數組名 = new 資料類型[][]{{1},{1,2},{1,2,3}};
7.練習題
練習1
題目:連接配接兩個數組,使其組成一個新的數組。
import java.util.Arrays;
/**
* @标題: 章節5
* @項目名 練習1
* @項目描述: 連接配接兩個數組,使其組成一個新的數組
* @建立人 yaojiawen
* @建立時間 2021/4/519:35
*/
public class LianXi2 {
public static void main(String[] args) {
int[] num1 = {1, 2, 3};
int[] num2 = {4, 5, 6};
int len = num1.length + num2.length;
int[] zuHe = new int[len];
for (int a = 0; a < len; a++) {
if (a < num1.length) zuHe[a] = num1[a];
else zuHe[a] = num2[a - num1.length];
}
System.out.println(Arrays.toString(zuHe));
}
}
練習2
題目:把一個數組裡面的值拼接成一個字元串。如int[] a={1,2,3};使得String b=[1,2,3];
/**
* @标題: 練習1
* @項目名 章節4
* @項目描述: 把一個數組裡面的值拼接成一個字元串。如int[] a={1,2,3};使得String b=[1,2,3];
* 注:字元串連接配接可以用方法append()或字元串連接配接符 "+"
* @建立人 yaojiawen
* @建立時間 2021/3/3016:10
*/
public class LianXi1 {
public static void main(String[] args) {
int[] num = new int[3];
num[0] = 20;
num[1] = 30;
num[2] = 40;
String pinJei = "[";
for (int a = 0; ; a++) {
pinJei = pinJei + num[a];
if (a == num.length - 1) {
pinJei += "]";
break;
}
pinJei += ",";
}
System.out.println(Arrays.toString(num));
}
}
練習3
建立一個數組,這個數組中第一個和數組中最大的數交換位子,最小的和最後的數交換位置,其他元素位置不變。
import java.util.Arrays;
/**
* @标題: 章節5
* @項目名 練習3
* @項目描述: 建立一個數組,這個數組中第一個和數組中最大的數交換位子,最小的和最後的數交換位置,其他元素位置不變。
* @建立人 yaojiawen
* @建立時間 2021/4/1516:06
*/
public class LianXi3 {
public static void main(String[] args) {
int[] num = {4, 31, 48, 1, 3, 48, 4};
int a = 0, b = 0;
for (int i = 1; i < num.length; i++) {
if (num[a] < num[i]) a = i; //找出最大值的下标
if (num[b] > num[i]) b = i; //找出最小值的下标
}
int c = num[0]; //把第一個和最大值交換
num[0] = num[a];
num[a] = c;
c = num[num.length - 1]; //把最後一個和最小值交換
num[num.length - 1] = num[b];
num[b] = c;
System.out.println(Arrays.toString(num));
}
}