内容发布更新时间 : 2024/12/23 19:03:35星期一 下面是文章的全部内容请认真阅读。
第四章习题解答
4.1举例说明如何声明、创建和初始化一维数组。
声明一维数组有两种格式:
数组元素类型 数组名[]; 或者 数组元素类型[] 数组名 例如 String subStr1[]; int[] aa; 创建一维数组有三种方法:
先声明后创建 先用前面的两种方式声明数组,然后使用:数组名字=new 数组元素类型[元素个数]; 创建 例如 int aa[];
aa[]=new int[6];
在声明时创建 数组元素类型[] 数组名(或者是:数组元素类型 数组名[])=new 数组元素类型[元素个数];
例如 int aa[]=new int[6];
直接赋值创建 例如 int aa[]={2,3,4,5,6,7};
4.2举例说明如何声明、创建和初始化多维数组。
声明二维数组:类型 数组名[ ][ ] 类型[ ][ ]数组名 类型[ ]数组名[ ] 例如:
声明 Sting subStr[ ][ ]; String [ ] [ ] subStr; String[ ] subStr[ ]; 创建 (1)String subStr[ ][ ]=new String[3][5];(直接分配,平衡数组)
(2)String subStr[ ][ ]=new String[3][ ];(从最高维开始对每一维分配不等长空间,非平衡数组)
subStr[0]=new String[4];//第1个子数组有4个元素 subStr[1]=new String[5];//第2个子数组有5个元素 subStr[2]=new String[2];//第3个子数组有2个元素
(3)int[ ][ ] x={{5,6,7},{8,9,10,11},{18,19,10,10},{2,98}};//直接赋值创建
初始化:数组创建后,如果没有初始化,则根据类型java会自动赋予默认值。一般用循环语句对其动态初始化,例如,以下循环给三维整型数组aa初始化为三角数组。 int a[]=new int[5];
int aaa[][][]=new int [4][3][3]; for (int i=0;i for (int i=0;i for (int j=0;j for (int k=0;k aaa[i][j][k]=(i+j+1)*(k+1);} } } 4.3一个数组能够存储不同类型的元素吗? 答:不能 4.4 编写一个java程序,形成以下形式的二维数组,并输出。 1 4 5 16 17 2 9 3 8 6 7 15 14 18 19 10 11 12 13 20 25 24 23 22 21 方法1:原样照抄,不动脑筋,当你实在做不出来时,可以这样办。 public class Array{ public static void main(String[] args){ int[][] a = {{1,2,9,10,25}, {4,3,8,11,24}, {5,6,7,12,23}, {16,15,14,13,22}, {17,18,19,20,21}}; for(int i=0; i< a.length; i++){ for(int j= 0; j System.out.print(\ }else System.out.print(a[i][j]+ \ } System.out.println(); } } } 方法2:比较复杂,需要技巧。请同学们研读!要会分析程序功能与运行结果!重要的代码要会写! 分析:5行5列二维数组元素值的规律是:除了左上角第一个元素为1,其余是按正反S形走向赋值,正两轮,反两轮(如果设1轮为正,则2轮为反,依次类推!),用1-4轮表示是:2-4,5-9,10-16,17-25,都是奇数个元素(分别是3、5、7、9,与轮号的关系是2×轮号+1),可把正对角线元素除去,则分别为1+1,2+2,3+3,4+4,+号前后的偶数个元素的行标和列标的变化正好相反,奇数轮时,+号前是列号不变,行号从0增加,每次增1,元素数值增加,+号后是列号不变,行号每次减少1,直到0,元素数值增加;0偶数轮时,+号前是行号不变,列号从0增加,每次增1,元素值增加,+号后是列号不变,行号每次减少1,直到0,元素值增加。这样在每次循环中赋值时就要根据此规律不断改变行号与列号。其分界线是数组正对角线元素,对应4轮分别是a[1][1],a[2][2],a[3][3],a[4][4],则分界线左右侧的下标规律是行号不变,列号改变,且小于分界线元素的列标,而分界线右侧的下标规律是列号不变,行号改变,且小于分界线元素的行标。此规律可推广到行数与更数相等的所有二维数组。程序如下: public class 按规律对二维数组元素赋值{ public static void main(String[] args) { int m=10; //定义变量,设定二维数组行数列数 int[][] a=new int[m][m];//建立数组 a[0][0]=1;//左上角第1 个元素赋值为1 int n=1,zero=0,change=1;//定义变量 int value=2; for(int i=1;i for(int j=0;j<(2*n+1);j++)//内层循环控制每轮外层循环共要赋值的元素个数,注意表达式2中的n不断自增1(范围是2-5) { if(i%2!=0)//奇数轮,即对应第1、3轮:2-4,10-16 { if(j 对 a[zero++][change]=value++;//a[0][1],a[][],a[][],a[][],a[][],a[][]赋值 } if(j==n) { a[j][j]=value++;//对正对角线元素赋值 } if(j>n) { a[change][--zero]=value++;//a[1][0],a[][],a[][],a[][],a[][],a[][]赋值 } } else//偶数轮,即对应第2、4轮:5-9,17-25 { if(j a[change][zero++]=value++; } if(j==n) { a[j][j]=value++; } if(j>n) 对