陣列
什么是陣列?
陣列是存放資料長度固定的容器,并且其資料型別也是一致的,
怎么宣告陣列?
下面這個就是宣告陣列的例子
int[] arr;
int 陣列的資料型別,陣列中要存盤什么型別的資料
[] 代表它是一個陣列
arr 陣列的名字,自己定義的
陣列怎么宣告并初始化?
這里有三個方法:
方式一 靜態初始化
陣列的資料型別[] 陣列名 = new 陣列的資料型別[]{元素1,元素2,元素3...};
例:
int[] arr0 = new int[]{2,4,6,8};
這個陣列有四個元素 所以它的長度為4
方式二 隱式初始化
陣列的資料型別[] 陣列名 = {元素1,元素2,元素3...}
例:
double[] arr1 = {2.2,3.3,4.4};
方式三 動態初始化
陣列的資料型別[] 陣列名 = new 陣列的資料型別[長度];
陣列名[下標] = 值;
[長度]:陣列的長度,可以存放多少個元素
這里明確一個概念,陣列的下標是從0開始計算的
例:
int[] arr2 = new int[3];//[3]代表這個陣列可以存放3個元素
arr[0] = 2;//[0]代表陣列的第1個資料 將2存進去到陣列第1個位置
arr[1] = 4;//[1]代表陣列的第2個資料 將4存進去到陣列第2個位置
arr[2] = 6;//[2]代表陣列的第3個資料 將6存進去到陣列第3個位置
學會初始化和宣告陣列了,那么,要怎么樣才可以輸出陣列呢?
我們訪問陣列一般都是通過下標(索引)來查找的
比如:
int[] arr = {3,6,9,12,15};
//我們用下標來找12,12的下標是多少呢,我們陣列的下標都是自動從0開始的編號,
//所以12的下標為3 我們輸出看看對不對
int res = arr[3];//這里用了一個變數接收了一下 是可以直接輸出的
System.out.println(res);//輸出12
下標
說到這里,你可能會問,下標是什么?
那么,就要記住了,下標簡單來說是一個從0開始的編號,像上面這一段代碼,3開始到15,下標依次編號為0、1、2、3、4
輸出的時候,int res = arr[3];這里[]里面的下標為3,也就是對應陣列中的“12”,所以會輸出12
求陣列長度
這里陣列長度并不長,那如果有一個陣列中,有n個數值,我們不知道有多少個呢?那我們怎么樣可以知道這個陣列有多長?
這里就會用到一個length語法
length怎么用呢?看一下就知道了:
//怎么知道陣列的長度是多少,我們這里有一個長度屬性length
//使用 陣列名.length就可以了 陣列最大下標為 陣列名.length-1
int[] arr = {21,33,44,55,66,77};
int len = arr.length;
System.out.println(len);//結果為6 正是陣列的長度
沒錯,在陣列名后加一個.length就可以了,length就是他的長度,也就是陣列里面有多少個數字
如何遍歷陣列?
什么是遍歷?
所謂遍歷 (Traversal),是指沿著某條搜索 路線 ,依次對樹(或圖)中每個節點均做一次訪問,
也就是說,陣列的遍歷就是對陣列中的每一個數進行一個輸出!
我們之前學過回圈了,現在用它來遍歷陣列
int[] arr = {12,34,65,76,89,99};
for(int i=0;i<arr.length;i++){
//陣列的下標從0開始的我們將i設為0,arr.length陣列的長度
System.out.println(arr[i]);//正確輸出
}
這里,我們用for回圈,來遍歷陣列,輸出陣列arr中所有的數
這里,我們可以看到,i<arr.length,也就是說,i<陣列arr的長度,不會超出陣列最大值,總不能陣列中6個數,你卻要他輸出7個數吧!
因為陣列下標,也就是陣列中每個數的編號,是從0開始的,所有我們的回圈里面i必須為0
輸出時,System.out.println(arr[i])中,i會從0依次疊加到陣列的最大下標,輸出陣列的所有數值
這里,提出一個問題:
怎么獲取陣列中最大的值?
先給出個思路:
先定義一個變數保存陣列索引為0的元素,然后再使用回圈遍歷陣列,在回圈中將遍歷到的元素和先前定義的變數比大小,如果大于變數,那就將變數交換為當前元素,直到回圈結束,就可以找出最大值了
思路看不懂也沒什么關系,跟著文章來
public static void main(String[] args) {
int[] arr = {3,5,6,8,9,7};
int max = arr[0];//定義變數,將陣列下標為0的元素存入
for(int i=1;i<arr.length;i++){//因為下標為0的元素存入到變數中了,所以從下標1開始回圈
if(max < arr[i]){//判斷當前遍歷到的元素是否大于變數max
max = arr[i];//如果大于變數max ,那就將當前遍歷到的元素替換掉變數原先的值
}//如果不大于,繼續回圈
}
System.out.println(max);//最后輸出結果 結果為:9
}
//最大值會求了 那最小值也同樣的道理,還有求陣列的總和都是一樣的思路,大家自己去試一下
這里有一個回圈,目的是什么呢?
這里我們可以看到,我們定義了一個空的最大值“max”
目的呢,就是利用回圈,讓陣列中的每一個數值與最大值max(現在還是個空值)比較,利用if選擇,在挨個進行比較時,當max這個數,小于陣列中的數時,我們就將它與max交換,因為我們要保證max是陣列中最大的那個數
挨個比較之后,就會輸出max這個最大值了!
下面我們看一下經典的冒泡排序
什么是冒泡排序?
就是使用回圈將陣列中的元素按從大到小或從小到大排序好
這里,我也給個思路:
這里需要使用到兩個for回圈,外邊的回圈每回圈一次就可以找到一個最大值
里邊的回圈每回圈一次就產生一次對比,在內層回圈中在判斷前一個元素是否比后一個元素小,是的話互換位置,最后輸出
這個可能會有一點難度,做好準備!
別著急,先看代碼
public static void main(String[] args) {
int[] arr = {3,11,6,20,9,7};
//外層回圈每回圈一次確定一個最大的元素
for(int i=0;i<arr.length;i++){
//內層回圈每回圈一次產生一次對比
for(int j=0;j<arr.length-1;j++){
//將當前的元素與后一個元素比較
if(arr[j]<arr[j+1]){
//如果當前元素小于后一個元素 互換位置
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//最后回圈輸出 從大到小排序
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
}
看到這個長度,哎,肯定不簡單哪,不過,我們先來分析分析!
我們先來看看第一個回圈,也就是外層回圈,外層回圈每進行一次啊,內層回圈就進行一次比較,總共可以進行i<arr.length次比較
這里可能會有點迷糊,不用管他,慢慢摸索就可以
看看第二個回圈,這個回圈就是最關鍵的回圈,利用if,使陣列中前一個數值與后一個陣列進行比較,如果,前一個元素比后一個數小,就將他們互換,記住是互換!
于是就會出現一個結果,有一個最小的數值被調換到了最后!
這里我們看看一張圖

我將第一個回圈注釋掉了
這里我們發現,單純第二個回圈,只能將一個最小數值調換到最后
那么這里就體現了第一個回圈(也就是外部回圈)的作用,外部回圈會讓第二個回圈,也就是內部回圈再次執行
再次內部回圈后
于是第二小的數值被調換到倒數第二個位置
外部回圈i<arr.length次后,才可以利用內部回圈全部將陣列中的數從大到小依次排好
最后,利用回圈,遍歷陣列并且輸出
去掉外部回圈的注釋,我們運行一下看看!

這里從大到小排序成功了
那么,從小到大排序同理,相反的演算法
不懂的話,慢慢摸索吧!
陣列例外與錯誤
*陣列角標越界例外java.lang.ArrayIndexOutOfBoundsException:
出現原因:訪問了陣列中不存在的角標值!
解決方案:更改角標在范圍之內.
*空指標例外java.lang.NullPointerException
**出現原因:代碼結構不嚴謹(某個物件已經為空)
**解決方案:需要給該物件進行非空判斷!
面試題
*陣列中有沒有length屬性,字串中有沒有length屬性,集合中有沒有length屬性:
**陣列中有length屬性
**字串中沒有length屬性:String類中有:length();
**集合中沒有length屬性:集合中:size();
文章到此結束,不懂可以評論哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/305190.html
標籤:java
上一篇:java的圖書管理系統簡化版
