多维(Multi-dimensional)数组维数由索引个数决定。
常用的数组:一维(one-dimensional)数组、二维(two-dimensional)数组
16.2 创建二维数组
索引从0开始,创建成表格,第一个索引是行索引,第二个索引是列索引。
length属性:第一个索引的长度。
16.3 初始化二维数组:数值用逗号分隔,行用大括号分隔。
16.4 不规则数组(ragged array):可变列数的二维数组。
如果只声明但不初始化不规则二维数组,必须声明行数(第一索引),可以不声明列数(第二索引)。
问:不规则数组只能是二维吗?
答:不规则数组可以是多维,并且都是必须声明第一索引就可以了。
自测题:
1. 考虑下列数组声明语句,该数组用于存储学生成绩的集合
char [][] grades=new char[4][20];
a) 该数组有几个维度?
2个
b) grades.length的值是多少?
4
c) grades[0].length的值是多少?
20
d) 第一组第一个学生的成绩为B
grades[0][0]='B';
2. 声明合适的数组
a) 进球数:20个球队,38场比赛
int scores[20][38];
b) 座位:70行座位,每行20个座位
boolean seats[70][20];
3. 记录火车晚点情况
a) 一年中第几周,每周中第几天晚点次数
int late[52][7];
b)
int daysNum=0;
for (int i=0;i<52;i++)
for (int j=0;j<7;j++)
if (late[i][j]==2)
daysNum++;
4.
a) 规则二维数组与不规则二维数组的区别:P390
列数(第二索引)是固定的还是可变的。
b) 不规则二维数组triangle
int [][] triangle = new int[4][];
for (int i=0;i<4;i++)
triangle[i]=new int[i+1];
c) triangle中的最大值
int biggestNum;
biggestNum=triangle[0][0];
for (int i=1;i<4;i++)
for (int j=0;j<triangle[i].length;j++)
if (biggestNum < triangle[i][j])
biggestNum=triangle[i][j];
5. 网格布局策略:P397
允许为将要添加的元素设定行数和列数。排列方式由系统设定,默认为从左到右,从上到下。
编程练习:代码附件
1. VarNoughtsAndCrosses.java RunVarNoughtsAndCrosses.java
2. CheckTrain.java CheckTrainTest.java InvalidDateException.java
3. TimeTable.java TimeTableException.java TimeTableTest.java
TimeTableGUI.java RunTimeTableGUI.java 做界面太消耗时间了,暂时不做了。