Java不规则数组
规则的 4×3 二维数组有 12 个元素,而不规则数组就不一定了。如下代码静态初始化了一个不规则数组。
int intArray[][] = {{1,2}, {11}, {21,22,23}, {31,32,33}};
高维数组(二维以及二维以上的数组称为高维数组)是 4 个元素,但是低维数组元素个数不同,如图 1 所示,其中第 1 个数组有两个元素,第 2 个数组有 1 个元素,第 3 个数组有 3 个元素,第 4 个数组有 3 个元素。这就是不规则数组。
图 1 不规则数组
动态初始化不规则数组比较麻烦,不能使用 new int[4][3] 语句,而是先初始化高维数组,然后再分别逐个初始化低维数组。代码如下:
int intArray[][] = new int[4][]; //先初始化高维数组为4
// 逐一初始化低维数组
intArray[0] = new int[2];
intArray[1] = new int[1];
intArray[2] = new int[3];
intArray[3] = new int[3];
从上述代码初始化数组完成之后,不是有 12 个元素而是 9 个元素,它们的下标索引如图 2 所示,可见其中下标 [0][2]、[1][1] 和 [1][2] 是不存在的,如果试图访问它们则会抛出下标越界异常。
图 2 不规则数组访问
提示:下标越界异常(ArrayIndexOutOfBoundsException)是试图访问不存在的下标时引发的。例如一个一维 array 数组如果有 10 个元素,那么表达式 array[10] 就会发生下标越界异常,这是因为数组下标是从 0 开始的,一个元素下标是数组长度减 1,所以 array[10] 访问的元素是不存在的。
下面介绍一个不规则数组的示例:
不规则数组访问和遍历可以使用 for 和 for-each 循环,但要注意下标越界异常发生。import java.util.Arrays;
public class HelloWorld {
public static void main(String[] args) {
int intArray[][] = new int[4][]; // 先初始化高维数组为4
// 逐一初始化低维数组
intArray[0] = new int[2];
intArray[1] = new int[1];
intArray[2] = new int[3];
intArray[3] = new int[3];
// for循环遍历
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < intArray[i].length; j++) {
intArray[i][j] = i + j;
}
}
// for-each循环遍历
for (int[] row : intArray) {
for (int column : row) {
System.out.print(column);
// 在元素之间添加制表符,
System.out.print('\t');
}
// 一行元素打印完成后换行
System.out.println();
}
System.out.println(intArray[0][2]); // 发生运行期错误
}
}
上述代码第 18 行和第 19 行采用 for-each 循环遍历不规则数组,其中代码第 18 行 for-each 循环取出的数据是 int 数组,所以 row 类型是 int[]。代码第 19 行 for-each 循环取出的数据是 int 数据,所以 column 的类型 int。另外,注意代码第 27 行试图访问 intArray[0][2]元素,由于 [0][2] 不存在所以会发生下标越界异常。
- 随机文章
- 中国马尔代夫人口(中国游客泛滥,马尔代夫人口过度拥挤)
- 中国马尔代夫费用(体验中国式马尔代夫,仅需少量费用!)
- 增城市马尔代夫(增城市打造现代化马尔代夫旅游海岛闪亮登场)
- 中国马尔代夫签证(中马签证签发:赴马尔代夫旅游更便利)
- 马尔代夫风景最美(重写的标题:赏识马尔代夫最美风景)
- 宽幅马尔代夫壁纸(高清马尔代夫风景壁纸,让你身临其境)
- 巴厘岛马尔代夫歌(旅行巴厘岛与马尔代夫,非凡视听体验)
- 去马尔代夫购什么(马尔代夫必买清单,如何购买?)
- 日本空袭马尔代夫(日本战机袭击马尔代夫,引发国际关注)
- 无锡马尔代夫在哪(无锡市哪里可以体验马尔代夫的风情?)
- 惠普投资马尔代夫(惠普向马尔代夫投资:加速数字化转型)
- 带鱼钩去马尔代夫(马尔代夫海域丰富带鱼,钓到满载收获)
- 有组团去马尔代夫(马尔代夫之旅,邀请小伙伴们一起来!)
- 入境 马尔代夫(马尔代夫:梦幻天堂中的海底世界)
- 唐山马尔代夫小岛(中国版马尔代夫——唐山马尔代夫小岛)
- 打卡潍坊马尔代夫(打卡潍坊马尔代夫岛屿,畅享惬意假期)
- 泰和马尔代夫游泳(泰和旅游推荐:畅游马尔代夫美丽海域)
- 衢州马尔代夫酒店(衢州喜来登度假村:马尔代夫风情再现)
- 抚州三江马尔代夫(抚州三江打造仿佛马尔代夫的度假胜地)
- 迪拜马尔代夫厨房(迪拜马尔代夫:一起探索当地厨房文化)
- 腿上作画马尔代夫(在马尔代夫海滩上,女孩用腿主创艺术)
- 除了马尔代夫水屋(重构马尔代夫度假:享受水里别墅生活)
- 马尔代夫下海了吗(马尔代夫:下潜探海底世界开始火热!)
- 日本 马尔代夫(日本游客涌向马尔代夫,旅游业复苏)
- 长桥水库马尔代夫(长桥水库打造仿佛马尔代夫的度假胜地)
- 芜湖 马尔代夫(芜湖旅行社推出马尔代夫旅游优惠!)
- 马尔代夫低价陷阱(警惕!马尔代夫游客陷入低价诈骗陷阱)
- 缅北 马尔代夫(缅北攻略:揭秘马尔代夫海岛游最佳选择)
- 马尔代夫中国舰艇(中国海军首次在马尔代夫执行护航任务)
- 跨越马尔代夫群岛(穿越马尔代夫岛屿,探秘美丽海洋世界)
