java多维数组定义_java基础数组的定义与多维数组

1.数组定义格式分为动态和静态

(1)静态初始化的格式:两种

数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3...}

//示例

int[] arr = new int[]{10,20,30,40};

数据类型[] 数组名 = {元素1, 元素2, 元素3...};

//示例

int[] arr = {10,20,30,40};

(2)数组的动态定义格式

数据类型[]  数组名 = new 数据类型[数组长度];

数据类型 变量名[] = new 数据类型[数组长度];了解即可

//数组动态初始化

//示例

//定义长度为3的int数组

int[] arr = new int[3];

//定义长度为5的double数组

double[] arr = new double[5];

//定义长度为5的char数组

char[] arr = new char[5];

//定义长度为4的字符串数组

String[] arr = new String[4];

(3)数组的索引值的特点?

数组的索引是从0开始,每次+1.

=============================================

2.多维数组

多维数组声明

数据类型[][] 数组名称;

数据类型[] 数组名称[];

数据类型数组名称[][];

以上三种语法在声明二维数组时的功能是等价的。同理,声明三维数组时需要三对中括号,中括号的位置可以在数据类型的后面,也可以在数组名称的后面,其它的依次类推。

例如:

int[][] map;

char c[][];

和一维数组一样,数组声明以后在内存中没有分配具体的存储空间,也没有设定数组的长度。

-----------------------------------------------------------------------------------------------------------------------------------------------------------

多维数组初始化

和一维数组一样,多维数组的初始化也可以分为静态初始化(整体赋值)和动态初始化两种,其语法格式如下。

静态初始化

以二维数组的静态初始化为例,来说明多维数组静态初始化的语法格式。

示例代码如下:

int[][] m = {{1,2,3},{2,3,4}};

在二维数组静态初始化时,也必须和数组的声明写在一起。数值书写时,使用两个大括号嵌套实现,在最里层的大括号内部书写数字的值。数值和数值之间使用逗号分隔,内部的大括号之间也使用逗号分隔。由该语法可以看出,内部的大括号其实就是一个一维数组的静态初始化,二维数组只是把多个一维数组的静态初始化组合起来。

同理,三维数组的静态初始化语法格式如下:

int[][][] b = {{{1,2,3},{1,2,3}},{{3,4,1},{2,3,4}}};

说明:这里只是演示语法格式,数值本身没有意义。

动态初始化

二维数组动态初始化的语法格式:

数据类型[][] 数组名称= new 数据类型[第一维的长度][第二维的长度];

数据类型[][] 数组名称;

数组名称= new 数据类型[第一维的长度][第二维的长度];

示例代码:

byte[][] b = new byte[2][3];

int m[][];

m = new int[4][4];

和一维数组一样,动态初始化可以和数组的声明分开,动态初始化只指定数组的长度,数组中每个元素的初始化是数组声明时数据类型的默认值。例如上面初始化了长度为2X3 的数组b,和4X4 的数组m。使用这种方法,初始化出的第二维的长度都是相同的,如果需要初始化第二维长度不一样的二维数组,则可以使用如下的格式:

int n[][];

n = new int[2][]; //只初始化第一维的长度

//分别初始化后续的元素

n[0] = new int[4];

n[1] = new int[3];

这里的语法就体现了数组的数组概念,在初始化第一维的长度时,其实就是把数组n 看成了一个一维数组,初始化其长度为2,则数组n 中包含的2个元素分别是n[0]和n[1],而这两个元素分别是一个一维数组。后面使用一维数组动态初始化的语法分别初始化n[0]和n[1]。

----------------------------------------------------------------------------------------------------------------------------------------------------------------

引用数组元素

对于二维数组来说,由于其有两个下标,所以引用数组元素值的格式为:

数组名称[第一维下标][第二维下标]

该表达式的类型和声明数组时的数据类型相同。例如引用二维数组m中的元素时,使用m[0][0]引用数组中第一维下标是0,第二维下标也是0 的元素。这里第一维下标的区间是0 到第一维的长度减1,第二维下标的区间是0 到第二维的长度减1。

---------------------------------------------------------------------------------------------------------------------------------------------------------------

获得数组长度

对于多维数组来说,也可以获得数组的长度。但是使用数组名.length获得的是数组第一维的长度。如果需要获得二维数组中总的元素个数,可以使用如下代码:

int[][] m = {{1,2,3,1},{1,3},{3,4,2}};

int sum = 0;

for(int i = 0;i < m.length;i++){         //循环第一维下标

sum += m[i].length;                 //第二维的长度相加

}

在该代码中,m.length 代表m 数组第一维的长度,内部的m[i]指每个一维数组元素,m[i].length 是m[i]数组的长度,把这些长度相加就是数组m中总的元素个数。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

多维数组使用示例

多维数组在实际使用时,更多的在于数组的设计,在实际使用中,一般对于多维数组的统计相对来说比一维数组要少一些,更多的设计数组的大小,并规定数组中存储值的含义,在代码中按照值的规定使用数组。

所以在实际使用多维数组以前,需要考虑清楚:

① 需要几维数组

② 每一维的长度是多少

③ 按照怎样的规则存储值

④ 数组值的意义是什么

拉丁方阵

要求:实现任意阶拉丁矩阵的存储和输出拉丁矩阵是一种规则的数值序列,例如4 阶的拉丁矩阵如下所示:

1 2 3 4

2 3 4 1

3 4 1 2

4 1 2 3

该矩阵中的数字很规则,在实际解决该问题时,只需要把数值的规律描述出来即可。

实现思路:声明一个变量n,代表矩阵的阶,声明和初始化一个nXn 的数组,根据数据的规律,则对应的数值为(行号+ 列号+ 1),当数值比n 大时,取和n的余数。

实现的代码如下:

int n = 6;

int[][] arr = new int[n][n];

int data; //数值

//循环赋值

for(int row = 0;row < arr.length;row++){

for(int col = 0;col

data = row + col + 1;

if(data <= n){

arr[row][col] = data;

}else{

arr[row][col] = data %n;

}

}

}

//输出数组的值

for(int row = 0;row < arr.length;row++){

for(int col = 0;col

System.out.print(arr[row][col]);

System.out.print(' ');

}

System.out.println();

}

该代码中变量data 存储行号+列号+1 的值,每次在赋值时判别data的值是否小于等于n,根据判断的结果赋值对应数组元素的值。

在解决实际问题时,观察数字规律,并且把该规律使用程序进行表达,也是每个程序员需要的基本技能

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值