国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java基礎語(yǔ)法之二維數組詳解

發(fā)布時(shí)間:2021-07-17 21:51 來(lái)源:腳本之家 閱讀:0 作者:GaryLea 欄目: 編程語(yǔ)言

目錄

          一、二維數組

          進(jìn)入正題之前.首先為了便于大家理解,我畫(huà)了一個(gè)圖:
          xx槍?xiě)鹩螒蛑? 我是一個(gè)剛剛注冊賬號的小白,系統送了我兩把槍,此時(shí),我的武器庫只有這么一層(可以理解為一位數組,槍就是對應的數組中對應的元素)

          經(jīng)過(guò)艱苦卓絕的戰斗,終于有了一筆錢(qián),現在我打算配置好的游戲裝備,我現在有了一個(gè)槍柜,它可以存放三層的槍械,每一層都可以放多把武器(這個(gè)就是二維數組,有多層,每層都是一個(gè)一維數組)

          隨著(zhù)游戲時(shí)長(cháng)和我的高超技術(shù),獲取游戲裝備的效率越來(lái)越高了,一個(gè)槍柜已經(jīng)存不下了,于是,我就有了多個(gè)槍柜(這個(gè)就是多維數組,單個(gè)維度存放的就是單個(gè)的二維數組,單個(gè)二維數組中有多個(gè)一維數組~):


          上圖從一維數組到多維數組的演變~是不是很形象,哈哈~

          二維數組的定義

          • 二維數組,本質(zhì)上就是一個(gè)數組,它內部又包含了多個(gè)一維數組
          • 二維數組也可以看成一個(gè)二維表,行*列組成的二維表,只不過(guò)這個(gè)二維表,每一行的列數還可能不同。但是每一個(gè)單元格中的元素的數據類(lèi)型是一致的,例如:都是int,都是String等

          • 二維數組的標記: [][]

          二、二維數組的聲明與初始化

          2.1 聲明

          • 聲明一個(gè)二維數組
          • int[][] arr;

          語(yǔ)法格式

          //推薦
          元素的數據類(lèi)型[][] 二維數組的名稱(chēng);
          //不推薦
          元素的數據類(lèi)型  二維數組名[][];
          //不推薦
          元素的數據類(lèi)型[]  二數組名

          照例,我把一些不推薦但是不會(huì )造成編譯異常的寫(xiě)法放上,因為有的面試題會(huì )遇到,有印象就好

          2.2 初始化

          • 初始化如同一維數組一樣,同樣有兩種方法

          2.2.1 靜態(tài)初始化

          //1.先聲明,再靜態(tài)初始化
          元素的數據類(lèi)型[][] 二維數組名;
          二維數組名 = new 元素的數據類(lèi)型[][]{
          			{元素1,元素2,元素3 。。。}, 
          			{第二行的值列表},
          			...
          			{第n行的值列表}
          		};
          //2.聲明并同時(shí)靜態(tài)初始化
          元素的數據類(lèi)型[][] 二維數組名 = new 元素的數據類(lèi)型[][]{
          			{元素1,元素2,元素3 。。。}, 
          			{第二行的值列表},
          			...
          			{第n行的值列表}
          		};
          //3.聲明并同時(shí)靜態(tài)初始化的簡(jiǎn)化寫(xiě)法
          元素的數據類(lèi)型[][] 二維數組的名稱(chēng) = {
          			{元素1,元素2,元素3 。。。}, 
          			{第二行的值列表},
          			...
          			{第n行的值列表}
          		};
          //聲明二維數組
          int[][] arr;
          //靜態(tài)初始化
          arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
          //arr = new int[3][3]{{1,2,3},{4,5,6},{7,8,9}};//錯誤,靜態(tài)初始化,右邊new 數據類(lèi)型[]中不能指定長(cháng)度
          //聲明并同時(shí)初始化
          int[][] arr = new int
          

          示例代碼1:

          public class Array2Demo1 {
          	public static void main(String[] args) {
          		//定義數組
          		int[][] arr = {{1,2,3},{4,5},{6}};
          		
          		System.out.println(arr);
          		System.out.println(arr[0]);
          		System.out.println(arr[1]);
          		System.out.println(arr[2]);
          		
          		System.out.println(arr[0][0]); //1
          		System.out.println(arr[1][0]); //4
          		System.out.println(arr[2][0]); //6
          		
          		System.out.println(arr[0][1]); //2
          		System.out.println(arr[1][1]); //5
          		//越界
          		System.out.println(arr[2][1]); //錯誤
          	}
          }
          

          示例代碼2:

          public class TwoArryTest {
              public static void main(String[] args) {
                  // 靜態(tài)初始化
                  // 定義一個(gè)二維數組MM資源庫
                  String[][] girls = new String[][]{ {"北方小姐姐","南方小姐姐","臺灣小姐姐"},{"東京小姐姐","北海道小姐姐"},{"俄羅斯小姐姐","紐約小姐姐","烏克蘭小姐姐"} };
                   /*
                  * 打印各個(gè)維度數組的元素
                  * 在我的認知中,世界上最美的MM國家分布
                  * 于是我創(chuàng  )建了一個(gè)二維數組MM資源庫,總共分為三個(gè)一位數組,
                  * 分別來(lái)自,中國,日本和其他國家的小姐姐~~
                  * 另外,每個(gè)地區我都放入了一些地區的小姐姐進(jìn)去
                  * */
                  // 獲取第一個(gè)數組中的北方小姐姐
                  System.out.println(girls[0][0]);
                  // 獲取第一個(gè)數組中的南方小姐姐
                  System.out.println(girls[0][1]);
                  // 獲取第二個(gè)數組中的東京小姐姐
                  System.out.println(girls[1][0]);
                  // 獲取第三個(gè)組中的烏克蘭小姐姐
                  System.out.println(girls[2][2]);
              }
          }
          

          2.2.2 動(dòng)態(tài)初始化

          動(dòng)態(tài)初始化創(chuàng )建可以不用聲明里面一維數組的長(cháng)度,因此,它每個(gè)一維數組長(cháng)度可以不一樣,so,就有了下面兩種初始化方式:

          • 動(dòng)態(tài)初始化一(規則二維表)

          程序員指定數組的長(cháng)度,后期再賦值(系統會(huì )先給定元素默認初始值)

          規則二維表:每一行的列數是相同的

          格式

          //(1)確定行數和列數
          元素的數據類(lèi)型[][] 二維數組名 = new 元素的數據類(lèi)型[m][n];
          m:表示這個(gè)二維數組有多少個(gè)一維數組?;蛘哒f(shuō)一共二維表有幾行
          n:表示每一個(gè)一維數組的元素有多少個(gè)?;蛘哒f(shuō)每一行共有一個(gè)單元格
           
          //此時(shí)創(chuàng  )建完數組,行數、列數確定,而且元素也都有默認值
          //(2)再為元素賦新值
          二維數組名[行下標][列下標] = 值;
          

          示例代碼:

          public static void main(String[] args) {
              //定義一個(gè)二維數組
              int[][] arr = new int[3][2];
              
              //定義了一個(gè)二維數組arr
              //這個(gè)二維數組有3個(gè)一維數組的元素
              //每一個(gè)一維數組有2個(gè)元素
              //輸出二維數組名稱(chēng)
              System.out.println(arr); //地址值	[[I@175078b
              
              //輸出二維數組的第一個(gè)元素一維數組的名稱(chēng)
              System.out.println(arr[0]); //地址值	[I@42552c
              System.out.println(arr[1]); //地址值	[I@e5bbd6
              System.out.println(arr[2]); //地址值	[I@8ee016
              
              //輸出二維數組的元素
              System.out.println(arr[0][0]); //0
              System.out.println(arr[0][1]); //0
          }
          

          動(dòng)態(tài)初始化二(不規則二維表)

          不規則二維表:每一行的列數可能不一樣 

          格式

          //(1)先確定總行數
          元素的數據類(lèi)型[][] 二維數組名 = new 元素的數據類(lèi)型[總行數][];
          //此時(shí)只是確定了總行數,每一行里面現在是null
          //(2)再確定每一行的列數,創(chuàng  )建每一行的一維數組
          二維數組名[行下標] = new 元素的數據類(lèi)型[該行的總列數];
          //此時(shí)已經(jīng)new完的行的元素就有默認值了,沒(méi)有new的行還是null
          //(3)再為元素賦值
          二維數組名[行下標][列下標] = 值;
          

          不規則二維表,聲明后,初始話(huà)內部一維數組時(shí)不能簡(jiǎn)寫(xiě)

          // 不規則二維表
          // 定義二維數組
          int[][] arr = new int[3][]; // 3行,未知的列
           
          // 初始化二維數組內的元素值
          arr[0] = new int[]{1}; // 此處不能簡(jiǎn)寫(xiě)為 arr[0] = {1}
          arr[1] = new int[]{2,3};
          arr[2] = new int[]{4,5,6,7};
          

          示例代碼1:

          public class TwoArryTest {
              public static void main(String[] args) {
                  //定義數組
                  int[][] arr = new int[3][];
                  System.out.println(arr);	//[[I@175078b
                  System.out.println(arr[1][0]);//NullPointerException
                  System.out.println(arr[0]); //null
                  System.out.println(arr[1]); //null
                  System.out.println(arr[2]); //null
                  //動(dòng)態(tài)的為每一個(gè)一維數組分配空間
                  arr[0] = new int[2];
                  arr[1] = new int[3];
                  arr[2] = new int[1];
                  System.out.println(arr[0]); //[I@42552c
                  System.out.println(arr[1]); //[I@e5bbd6
                  System.out.println(arr[2]); //[I@8ee016
                  System.out.println(arr[0][0]); //0
                  System.out.println(arr[0][1]); //0
                  //ArrayIndexOutOfBoundsException
                  //System.out.println(arr[0][2]); //錯誤
                  arr[1][0] = 100;
                  arr[1][2] = 200;
              }
          }
          

          示例代碼2:

          public class TwoArryTest {
              public static void main(String[] args) {
           
                  // 動(dòng)態(tài)初始化
                  /*
                  * 定義一個(gè)二維數組的槍柜,
                  * 它存放了三層槍械,
                  * 第一層存放的是狙擊槍,第二層存放的是步槍,第三層存放的是輔助武器
                  * 我買(mǎi)了這個(gè)槍柜,但并不是每一層存放的槍械數量相等,因此,我需要動(dòng)態(tài)初始化這個(gè)槍柜(數組)
                  * */
                  String[][] Guns = new String[3][];
           
                  // 將兩把狙擊槍放入第一層狙擊槍的槍柜中
                  String[] GunMagazine = {"AWM","Bird sniper"};
           
                  // 后來(lái),我又買(mǎi)了三把步槍,也需要存放到槍柜里
                  String[] rifle = {"AK47","M4A1 QBZ95"};
           
                  // 裝備很齊全了,下面,我還需要一些配件,輔助我取得游戲勝利
                  String[] auxiliaryWeapon = {"(手槍)pistol","(手雷)antitank grenade", "(煙霧彈)smoke bomb"};
              }
          }
          

          注意事項:如果是靜態(tài)初始化,右邊new 數據類(lèi)型[][]中不能寫(xiě)數字,因為行數和列數,由{}的元素個(gè)數決定

          三、二維數組的遍歷

          • 二維數組的遍歷,同一維數組一樣,區別就是,我們首先在外循環(huán),遍歷每一個(gè)一維數組,內循環(huán)中的 I 就是每一個(gè)一維數組的內存偽地址
          • 格式
          for(int i=0; i<二維數組名.length; i++){
              for(int j=0; j<二維數組名[i].length; j++){
                  System.out.print(二維數組名[i][j]);
              }
              System.out.println();
          }
          

          四、二維數組的內存圖分析

          二維數組再內存圖中的流程,如下圖:

          流程步驟:

          1.首先創(chuàng )建main方法,這個(gè)main方法會(huì )存在棧內存中,(這個(gè)內存中的棧,堆前面有提到過(guò),忘了沒(méi)關(guān)系,我下一章還會(huì )再分享一下)

          2.靜態(tài)初始化創(chuàng )建二維數組arr, 于是在棧內存中,創(chuàng )建一個(gè) int[][] arr= 

          3.在棧內存創(chuàng )建二維數組int[][]時(shí),里面的值會(huì )在堆內存開(kāi)辟一個(gè)空間,左邊的是二維數組,因為存儲了三個(gè)一維數組,因此,它有三個(gè)元素,右邊分別開(kāi)辟三個(gè)一維數組的內存空間

          4.每個(gè)內存空間都有一個(gè)地址,二維數組中存儲的是一維數組的地址,而棧內存int[][]arr = 存儲的是二維數組的內存地址

          5.所以,第一個(gè)打印arr的二維數組是Java源碼轉換后的內存地址,第二個(gè)是二維數組中第一個(gè)一維數組的內存地址

          6.第三個(gè)打印是二維數組中第一個(gè)一維數組中的第一個(gè)元素

          五、數組操作的常見(jiàn)異常

          數組越界異常

          示例代碼:

          public static void main(String[] args) {
             int[] arr = {1,2,3};
             System.out.println(arr[3]);
          }

          越界異常圖

          異常原因

          創(chuàng )建數組,賦值3個(gè)元素,數組的索引就是0,1,2,沒(méi)有3索引,因此我們不能訪(fǎng)問(wèn)數組中不存在的索引,程序運行后,將會(huì )拋出 ArrayIndexOutOfBoundsException 數組越界異常。在開(kāi)發(fā)中,數組的越界異常是不能出現的,一旦出現了,就必須要修改我們編寫(xiě)的代碼

          數組空指針異常

          示例代碼:

           public static void main(String[] args) {
                  //定義數組
                  int[][] arr = new int[3][];
                 
                 System.out.println(arr[0][0]);//NullPointerException
             }
          

          空指針異常圖

          異常原因

          異常原因:因為此時(shí)數組的每一行還未分配具體存儲元素的空間,此時(shí)arr[0]是null,此時(shí)訪(fǎng)問(wèn)arr[0][0]會(huì )拋出NullPointerException 空指針異常。

          六、總結

          本章介紹了一下二維數組的相關(guān)介紹,至此,數組和Java的一些基本語(yǔ)法就完啦,下一章開(kāi)始介紹面向對象,面向對象細節比較多,依舊是重在理解,理解,多做做案例,我抽空整理一下案例題,方便各位搭配我的文章進(jìn)行知識點(diǎn)鞏固,查漏補缺~~

          到此這篇關(guān)于Java基礎語(yǔ)法之二維數組詳解的文章就介紹到這了,更多相關(guān)Java二維數組內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

          免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

          日本三级吃奶头添泬| 免费午夜无码片在线观看影院| 成在人线AV无码免费高潮水| 青青草a免费线观a| 少妇人妻在线无码天堂视频网| 国产麻豆天美果冻无码视频|