【藍橋杯Java_C組·從零開始卷】第四節、一維數組與二維數組
整篇文章為對java數組的完整理解以及部分排序,并有一些簡單的demo,經典的案例與藍橋杯的一些經典數組題有專門的文章梳理。
目錄
數組概述
什么是數組
數組的結構
數組的特點:
數組分類
一維數組聲明與賦值
數組的常用屬性與方法
數組的遍歷
一維數組demo案例
數組隨機賦值
選擇排序
冒泡排序
增強for循環
二維數組聲明
二維數組練習題:
交叉數組
交叉數組遍歷
總結:
數組概述
什么是數組
單個變量能存儲信息。
如果有批量數據需要存儲,單個變量存儲時間和空間上不經濟和實用,而且過于麻煩,這時候需要用數組這一引用數據類型來存儲。
數組: 用來存儲具有相同數據類型的數據的集合,可以使用共同的名字來引用數組中存儲的數據。
特點: 數組可以存儲任何類型的數據,包括原始數據類型和引用數據類型,但是一旦指定了數組的類型之后,就只能用來存儲指定類型的數據。
數組的結構
數組是一個變量,用于將相同數據類型的數據存儲在內存空間中,數組中的所有元素必須屬于相同的數據類型。
棧(stack)與堆(heap)都是Java用來在Ram(隨機存取存儲器)中存放數據的地方。
與C++不同,Java自動管理棧和堆,程序員不能直接地設置?;蚨?。
棧的優勢是,存取速度比堆要快,僅次于直接位于CPU中的寄存器。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。另外,棧數據在多個線程或者多個棧之間是不可以共享的,但是在棧內部多個值相等的變量是可以指向一個地址的,堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由于要在運行時動態分配內存,存取速度較慢。
數組為了在內存中能夠存取多個數據更加方便,在設計數組時,數組的結構和基本要素都與生活中的電子儲物柜非常類似。
數組的特點:
同一個數組中的數組元素必須具有相同的數據類型,且在內存中連續分布。
無論數組中包含多少個數組元素,該數組只存在一個名稱,即數組名。
數組元素的編號稱為下標,數組的下標從0 開始 可以通過“數組名[ 下標]”的方式訪問數組中的任何元素。
數組的長度指數組可以存儲元素的最大個數,在創建數組時確定。
數組分類
在Java語言中,存在多種形式的數組。
一維數組聲明與賦值
int [] array;//整數數組
int array[]= new int[10];
int[] array= new int[10];
數組的常用屬性與方法
int[] array= new int[10];
//數組的長度
array.length;
//自然排序
Arrays.sort(array)
數組的遍歷
int [] a=new int[10];
for (int i = 0; i < a.length; i++) {
a[i]=i+1;
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+",");
}
一維數組demo案例
問題描述:輸入本部門5位員工的薪資,并根據用戶輸入的序號為指定員工進行提薪。若用戶輸入序號出現越界,則提示錯誤。要求:薪資的漲幅不能超過原薪資的20%,若漲幅超過20%,則按照原薪資的20%進行提薪。
數組隨機賦值
package Action;
import java.util.Random;
public class demos {
public static void main(String[] args) {
// 聲明隨機數
Random ra = new Random();
int[] arrays = new int[10];
// 賦值
for (int i = 0; i < arrays.length; i++) {
arrays[i] = ra.nextInt(50);
}
// 遍歷
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i] + ",");
}
}
}
算法中經常會用到某個班級、某個公司、某個集體中隨機選某些人,或者棋牌類游戲進行棋牌的分發,彩票的出獎,紅包隨機分發匹配人員等操作。 所以,我們需要使用一定的算法進行獲取一定數量的不重復的隨機數數組。
選擇排序
package Action;
public class demos {
public static void main(String[] args) {
int count = 0;
int[] arr = { 9, 12, 31, 123, 54, 3, 24, 324, 2345, 342 };
for (int i = 0; i < arr.length; i++) {// 前者循環次數
for (int j = 0; j < arr.length; j++) {// 后者循環次數
if (arr[i] > arr[j]) {// 如果i>j就是ture,【1】>【2】
int change = arr[i];// 賦值給change,告訴change,i多大
arr[i] = arr[j];// arr[i]賦值給arr[i],換位置
arr[j] = change;// arr[j]賦值給change,進行下一輪比較
}
count++;
}
}
for (int j2 = 0; j2 < arr.length; j2++) {
System.out.print(arr[j2] + ",");
}
System.out.println("\n循環次數:" + count);// 100次循環
}
}
冒泡排序
package Action;
public class demos {
public static void main(String[] args) {
int count = 0;
int[] arr = { 9, 12, 31, 123, 54, 3, 24, 324, 2345, 342 };
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {// 循環次數遞減
if (arr[j] < arr[j + 1]) {// 從大到小排列
int change = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = change;// 值交換
}
count++;
}
}
for (int j2 = 0; j2 < arr.length; j2++) {
System.out.print(arr[j2] + ",");
}
System.out.println("\n循環次數:" + count);// 45次循環
}
}
增強for循環
int nums[] = {1,2,3,4,5,6};
for(int num : nums) {
System.out.println(num);
}
二維數組聲明
二維數組的創建同樣有兩種方式
方式一:
使用new 類型[][]數組名= new 類型[行數][列數];
String [][]str = new String[5][5];
方式二:
聲明數組并且賦初始值
int [][] array = {{23,45,45},{12,11,10},{23,12,56}};
二維數組練習題:
計算二維整數數組兩條對角線的值的總和。
int[][] x1 = {
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },
};
交叉數組
int[][] arrays = {
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 1, 2, 3, 4, 5, 6},
{ 1, 2, 3, 4, 5, 6, 7 },
{ 1, 2, 3, 4, 5, 6},
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4, 5 },
{ 1, 2},
{ 1, 2, 3, 4, 5, 6, 7, 8 },
{ 1 },
};
交叉數組遍歷
//交叉數組遍歷
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
System.out.print(arrays[i][j]+",");
}
System.out.println();
}
總結:
數組:一組數據
數組能存儲所有數據類型的數據
同一個數組的所有數據必須是同一類型
數組的長度固定,不能改變
數組有一個屬性:length
數組對象.length;
數組的長度
分類:一維數組和多維數組
數組的使用
第一步:聲明數組變量
數據類型 [] 數組變量名;如:int [] a;
第二步:創建數組對象
new 數據類型[所要創建的數組的長度];
如:new int[5];
第三步:給數組元素賦值
數組變量名[下標]=1;
如:int[] a=new int[5]; ?? ??? ?a[0]=1;
第四步:訪問數組的元素
int max=a[0];?? ?//數組元素的使用,作為數據,給其他變量賦值
System.out.println(a[0]);//把數組元素保存的數據打印輸出
Java 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。