Java基础语法之二维数组详解

您所在的位置:网站首页 idea如何快捷生成输出语句 Java基础语法之二维数组详解

Java基础语法之二维数组详解

2023-01-23 08:08| 来源: 网络整理| 查看: 265

Java基础语法之二维数组详解

一、二维数组

Java基础语法之二维数组详解

进入正题之前.首先为了便于大家理解,我画了一个图:

xx枪战游戏中, 我是一个刚刚注册账号的小白,系统送了我两把枪,此时,我的武器库只有这么一层(可以理解为一位数组,枪就是对应的数组中对应的元素)

经过艰苦卓绝的战斗,终于有了一笔钱,现在我打算配置好的游戏装备,我现在有了一个枪柜,它可以存放三层的枪械,每一层都可以放多把武器(这个就是二维数组,有多层,每层都是一个一维数组)

随着游戏时长和我的高超技术,获取游戏装备的效率越来越高了,一个枪柜已经存不下了,于是,我就有了多个枪柜(这个就是多维数组,单个维度存放的就是单个的二维数组,单个二维数组中有多个一维数组~):

上图从一维数组到多维数组的演变~是不是很形象,哈哈~

二维数组的定义

二维数组,本质上就是一个数组,它内部又包含了多个一维数组

二维数组也可以看成一个二维表,行*列组成的二维表,只不过这个二维表,每一行的列数还可能不同。但是每一个单元格中的元素的数据类型是一致的,例如:都是int,都是String等

二维数组的标记: [][]

二、二维数组的声明与初始化

2.1 声明

声明一个二维数组

int[][] arr;

语法格式

//推荐

元素的数据类型[][] 二维数组的名称;

//不推荐

元素的数据类型 二维数组名[][];

//不推荐

元素的数据类型[] 二数组名

照例,我把一些不推荐但是不会造成编译异常的写法放上,因为有的面试题会遇到,有印象就好

2.2 初始化

初始化如同一维数组一样,同样有两种方法

2.2.1 静态初始化

//1.先声明,再静态初始化

元素的数据类型[][] 二维数组名;

二维数组名 = new 元素的数据类型[][]{

{元素1,元素2,元素3 。。。},

{第二行的值列表},

...

{第n行的值列表}

};

//2.声明并同时静态初始化

元素的数据类型[][] 二维数组名 = new 元素的数据类型[][]{

{元素1,元素2,元素3 。。。},

{第二行的值列表},

...

{第n行的值列表}

};

//3.声明并同时静态初始化的简化写法

元素的数据类型[][] 二维数组的名称 = {

{元素1,元素2,元素3 。。。},

{第二行的值列表},

...

{第n行的值列表}

};

//声明二维数组

int[][] arr;

//静态初始化

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}};//错误,静态初始化,右边new 数据类型[]中不能指定长度

//声明并同时初始化

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) {

// 静态初始化

// 定义一个二维数组MM资源库

String[][] girls = new String[][]{ {"北方小姐姐","南方小姐姐","台湾小姐姐"},{"东京小姐姐","北海道小姐姐"},{"俄罗斯小姐姐","纽约小姐姐","乌克兰小姐姐"} };

/*

* 打印各个维度数组的元素

* 在我的认知中,世界上最美的MM国家分布

* 于是我创建了一个二维数组MM资源库,总共分为三个一位数组,

* 分别来自,中国,日本和其他国家的小姐姐~~

* 另外,每个地区我都放入了一些地区的小姐姐进去

* */

// 获取第一个数组中的北方小姐姐

System.out.println(girls[0][0]);

// 获取第一个数组中的南方小姐姐

System.out.println(girlhttp://s[0][1]);

// 获取第二个数组中的东京小姐姐

System.out.println(girls[1][0]);

// 获取第三个组中的乌克兰小姐姐

System.out.println(girls[2][2]);

}

}

2.2.2 动态初始化

动态初始化创建可以不用声明里面一维数组的长度,因此,它每个一维数组长度可以不一样,so,就有了下面两种初始化方式:

动态初始化一(规则二维表)

程序员指定数组的长度,后期再赋值(系统会先给定元素默认初始值)

规则二维表:每一行的列数是相同的

格式

//(1)确定行数和列数

元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n];

m:表示这个二维数组有多少个一维数组。或者说一共二维表有几行

n:表示每一个一维数组的元素有多少个。或者说每一行共有一个单元格

//此时创建完数组,行数、列数确定,而且元素也都有默认值

//(2)再为元素赋新值

二维数组名[行下标][列下标] = 值;

示例代码:

public static void main(String[] args) {

//定义一个二维数组

int[][] arr = new int[3][2];

//定义了一个二维数组arr

//这个二维数组有3个一维数组的元素

//每一个一维数组有2个元素

//输出二维数组名称

System.out.println(arr); //地址值 [[I@175078b

//输出二维数组的第一个元素一维数组的名称

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

}

动态初始化二(不规则二维表)

不规则二维表:每一行的列数可能不一样

格式

//(1)先确定总行数

元素的数据类型[][] 二维数组名 = new 元素的数据类型[总行数][];

//此时只是确定了总行数,每一行里面现在是null

//(2)再确定每一行的列数,创建每一行的一维数组

二维数组名[行下标] = new 元素的数据类型[该行的总列数];

//此时已经new完的行的元素就有默认值了,没有new的行还是null

//(3)再为元素赋值

二维数组名[行下标][列下标] = 值;

不规则二维表,声明后,初始话内部一维数组时不能简写

// 不规则二维表

// 定义二维数组

int[][] arr = new int[3][]; // 3行,未知的列

// 初始化二维数组内的元素值

arr[0] = new int[]{1}; // 此处不能简写为 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

//动态的为每一个一维数组分配空间

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) {

// 动态初始化

/*

* 定义一个二维数组的枪柜,

* 它存放了三层枪械,

* 第一层存放的是狙击枪,第二层存放的是步枪,第三层存放的是辅助武器

* 我买了这个枪柜,但并不是每一层存放的枪械数量相等,因此,我需要动态初始化这个枪柜(数组)

* */

String[][] Guns = new String[3][];

// 将两把狙击枪放入第一层狙击枪的枪柜中

String[] GunMagazine = {"AWM","Bird sniper"};

// 后来,我又买了三把步枪,也需要存放到枪柜里

String[] rifle = {"AK47","M4A1 QBZ95"};

// 装备很齐全了,下面,我还需要一些配件,辅助我取得游戏胜利

String[] auxiliaryWeapon = {"(手枪)pistol","(手雷)antitank grenade", "(烟雾弹)smoke bomb"};

}

}

注意事项:如果是静态初始化,右边new 数据类型[][]中不能写数字,因为行数和列数,由{}的元素个数决定

三、二维数组的遍历

二维数组的遍历,同一维数组一样,区别就是,我们首先在外循环,遍历每一个一维数组,内循环中的 I 就是每一个一维数组的内存伪地址

格式

for(int i=0; i



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3