二维数组将使用多个下标访问数组元素,它适用于表格或更加复杂的排列形式。
例如对于一个二维表格,我们就可以用二维数组将其数据与数组中的数据一一对应。
如下表格有多行多列,那么二维数组这种特性就适合存放这样的数据。
接下来讲解一下C/C++中二维数组与Java中二维数组的区别。
C/C++
C/C++二维数组详细介绍,已经有好轮子了我就不造了(我不配)
Java
相比于C/C++,Java并没有指针机制。因此其二维数组并不是数组中的数组是另一个数组的指针,而是一个数组的数组,也就是一个存放各种同类型数组的数组,因此Java中的二维数组就摆脱了内层数组比如长度一样的限制,也就是相对于Java中数组内数组长度必须可以任意,如下。因此Java可以很方便的构造一个“不规则”数组。
int[][]a={
{1,2,3},
{2,3,4,5},
{4,5,6,7,8}
}; //Java创建二维数组的一种方式
int[][]b={
{1,2,3,4,5},
{2,3,4,5,6},
{4,5,6,7,8}
}; //C/C++创建二维数组的一种方式
其存放方式类似于下图。
a[i]表示引用第i个子数组,也就是二维数组的第i行,而它本身也是一个数组,因此可以通过a[i][j]访问这个内层数组的第j项。同时由于可以单独的存取数组的某一行,所以也可以对两行进行调换。
package shangji;
import java.lang.reflect.Array;
import java.util.Arrays;
public class DoubleArray {
public static void main(String[] args) {
int[][]a={
{1,2,3},
{2,3,4,5},
{4,5,6,7,8}
}; //创建二维数组的一种方式
for (int i[]:a)
{
for (int j : i)
System.out.print(j);
System.out.println();
}
int []temp=a[0];
a[0]=a[1];
a[1]=temp;
System.out.println("-----------华丽的分割线---------");
for (int i[]:a)
{
for (int j : i)
System.out.print(j);
System.out.println();
}
}
}
注意这一行代码
for (int i[]:a) //先获取内层的数组
{
for (int j : i) //遍历内层数组元素
System.out.print(j);
System.out.println();
}
我使用了for_each这种遍历方法,如果不了解这种遍历方法的可以先了解一下。
首先我们知道Java中的二维数组是数组的数组,因此如果我们需要得到内层数组的某一个数据,我们应该先得到一个内层数组,然后对这个内层数组进行遍历,这也就是上面代码的思想。
在C++中,Java声明
double[][] balances = new double[10][6];// Java
不同于
double balances[10][6];// C++
也不同于
double (balances)[6] = new doub1e[10][6];//C++
而是分配了一个包含10个指针的数组:double* balances = new double*[10];// C++
然后,指针数组的每一个元素被填充了一个包含6个数字的数组:
for (i = 0;i <10; i++)
balances[i] = new double[6];
庆幸的是,当创建new double[10][6]时,这个循环将自动地执行。当需要不规则的数组时,只能单独地创建行数组。



