智漁課堂官方免費教程二十六 Java基礎教程之陣列

2021-07-04 12:19:20 字數 3786 閱讀 2586

舉例:假如現在有十個人排成一隊【張三,李四,王五……】,這個隊的隊名叫a,然後要求第乙個人從0開始報數【張三報0,李四報1,王五報2……】。現在要求第乙個人出列,但現在還不知道張三的名字,怎麼辦?那麼只能要求a隊0號出列。請問此時誰會出列?很明顯是張三出列。

這對人就形成了類似陣列的結構;其中隊名a就對應陣列名,各個人報的號就對應陣列的下標,而每個人就對應陣列中的元素,人的個數就對應陣列的長度。

在程式設計中,把具有相同型別的若干個變數按有序的形式組合在一起,僅使用乙個變數名來儲存這些元素,用下標(下標從0開始)來對應不同位置的變數,這就是陣列。

宣告語法格式: 

方式一、資料型別 變數名 = ;

方式二、資料型別 變數名 = new 資料型別;

方式三、資料型別 變數名 = new 資料型別[長度值];

賦值語法格式:

變數名[下標] = 值;

例項:/*

執行完此句**後,記憶體中存在乙個名字叫i的變數,並且占用3個int型別長度的連續空間(即占用連續12位元組的記憶體空間),並按每個int型別長度(4位元組)為單位自左向右進行編號,編號從0開始。然後將int型別的值1存入編號為0的4個位元組中,2存入編號為1的4個位元組中,3存入編號為2的4個位元組中。並將這12位元組記憶體空間的起始位址複製給變數i

其中int是資料型別,中括號代表陣列,變數名i也可稱為陣列名,{}大括號表示陣列常量(其內部包含陣列元素),其中的資料1,2,3是陣列的三個(長度為3)元素(多個元素之間用英文格式的逗號隔開),對應的編號0、1、2是陣列的下標。

*/int  i = ;

//建立乙個長度為5的string型別的陣列;

//此處的new操作是在建立陣列物件,所以後面跟的是中括號和長度:型別[長度] 

string  str = new  string[5]; 

//為陣列的元素賦值;其中str [0]中的0代表的是下標

str [0] = "abc";

//此處的new操作是建立string物件,所以後面跟小括號,而不是中括號;

//然後將建立的string物件賦值給陣列中下標為1的位置

str [1] = new  string("xyz");

//此句會出現錯誤,因為陣列的長度是5,下標是0到4

//此處使用5作為下標,超出了陣列下標的界限

str[5] = "aaa"

注意:方式一只能寫在一條語句中,不能拆成兩條語句;

例如:int  i;   i = ;  //這樣是錯誤的。

方式二new 型別{};的中括號中不能寫長度值,大括號中元素的個數就是長度值

方式三new 型別[3];的中括號中必須寫長度值

另外:宣告陣列變數時可以寫在資料型別後,也可以寫在變數名後,如:int  i;

陣列是引用型別,其引用可以指向任何相同型別的陣列物件,但陣列物件一旦建立,其長度無法再改變。而且陣列物件占用的記憶體空間一定是連續的。

使用下標訪問陣列中的資料

語法格式:陣列名[下標]

獲取陣列的長度:陣列名.length;

例項:

package array;

/** * 運算元組類operationarray

* 實現向陣列中新增資料

* 訪問陣列中的資料

* 查詢陣列中的資料

* 修改陣列中的資料

* 向陣列中插入資料

* 刪除陣列中的資料

* @author 學霸聯盟 - 趙燦

*/public class operationarray else if(i == studentnames.length - 1)

} system.out.println("----------- 修改後的資料 -----------");

//將下標為2的「王五」修改為「趙六」

studentnames[2] = "趙六";

//呼叫遍歷陣列的方法,輸出修改後的資料

ergodicarray(studentnames);

system.out.println("----------- 插入後的資料 -----------");

/** 向下標為2的位置重新插入「王五」

* 既然是插入,從下標為2到陣列的結尾的每乙個元素都要向後移動一位

* 然後將下標為2的位置賦值為「王五」

* 所以for迴圈要從陣列中倒數第乙個元素開始訪問,即studentnames.length-1

* 至等於2時結束,並且下標是乙個乙個不斷在減小的

*/for (int i = studentnames.length - 1; i >= 2; i--)

} //呼叫遍歷陣列的方法,輸出修改後的資料

ergodicarray(studentnames);

system.out.println("----------- 刪除後的資料 -----------");

/** 將下標為2的位置上的值刪除,即刪除剛剛插入的「王五」

* 刪除後應該回到插入「王五」之前的狀態

* 恰好和插入相反,刪除是將2位置以後的每個位置的元素往前移動一位

*/for (int i = 2; i < studentnames.length; i++) else

} //呼叫遍歷陣列的方法,輸出修改後的資料

ergodicarray(studentnames);

}/**

* 遍歷陣列的方法;遍歷:就是乙個乙個的訪問

* 其中引數為需要遍歷的陣列

* 由於多處需要用到遍歷輸出陣列中的值,所以將其放到乙個方法

* 這樣在需要使用的位置,呼叫這個方法就可以復用遍歷輸出的**了

*/private static void ergodicarray(string array)

//輸出換行符

system.out.print("\n"); }}

執行結果:

----------- 初始陣列中的值 -----------

張三 李四 王五 null

----------- 查詢資料 -----------

李四所在陣列studentnames中的下標為:1

----------- 修改後的資料 -----------

張三 李四 趙六 null

----------- 插入後的資料 -----------

張三 李四 王五 趙六

----------- 刪除後的資料 -----------

張三 李四 趙六 null

就是一維陣列中的每個元素也是一維陣列,這樣組成的陣列就是二維陣列。

方式一、資料型別 陣列名 = ,,};

方式二、資料型別 陣列名;

陣列名 = new 資料型別,};

和一維陣列一樣,方式一只能寫在一條語句中,不能分成兩條語句編寫;

方式三、資料型別 陣列名 = new 資料型別[外層陣列長度][內層陣列長度];

陣列名[0][0] = 值;

方式四、資料型別 陣列名 = new 資料型別[外層陣列長度];

陣列名[下標] = new 資料型別[長度];

例項:

package array;

/** * twodimensionalarraydemo類:演示二維陣列

* @author 學霸聯盟 - 趙燦

*/public class twodimensionalarraydemo

} }}執行結果:

第1行第1列

第1行第2列

第1行第3列

第2行第1列

第2行第2列

第2行第3列

I學霸官方免費教程三十八 Java基礎教程之異常

程式中不正常的情況分為兩大類 錯誤 error 和異常 exception 錯誤 error 程式本身無法對這種不正常的情況進行處理,將會導致程式崩潰 例如 記憶體耗盡錯誤,jvm崩潰錯誤等 異常 exception 程式可以特殊的 對不正常的情況進行捕獲和處理,程式可以繼續執行 例如 除零異常,空...

I學霸官方免費教程三十九 Java基礎教程之執行緒

建立執行緒的兩種方式 1 實現runnable介面 還可以繼承其他類 2 繼承thread類 使用簡單 方式一 實現runnable介面 package thread 建立myrunnable類,並實現runnable介面 author 學霸聯盟 趙燦 public class myrunnable...

I學霸官方免費教程十二 Java基礎之內部類

在乙個類的內部或方法的內部宣告的類,叫做內部類。語法格式 訪問修飾符 static class 類名 可以簡單的把內部類理解成乙個變數,只不過這個變數的資料型別是class,使用時需要建立物件後再使用。成員內部類 直接宣告在類中的內部類 同成員變數 區域性內部類 生命在方法中的內部類 同區域性變數 ...