自考教材《java语言程序设计(一)》第四章习题解答

第四章习题解答

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)

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4