5.4 数组的综合实例
【实例5.6】设计一个程序,有两个整型数组:a[]和b[]。a数组中有5个元素,b数组中有5个元素。现在要求:
(1)分别输出两个数组中的各个元素及其长度。
(2)有一个数组c,它的元素就是a数组和b数组中一一对应的元素的乘积,并且输出其长度。
(3)有一个数组d,它的元素是前面三个数组中一一对应的元素满足的表达式:a[i]*c[i]-b[i]。
分析与编写:
要输出各个元素及长度。这个程序在前面也遇到过,具体程序段如下所示。
01 public class arrary6
02 {
03 public static void main(String[]args)
04 {
05 int[]a=new int[]{2,4,6,8,10};
06 for(int i=0;i<a.length;i++)
07 {
08 System.out.println("a["+i+"]="+a[i]);
09 }
10 System.out.println("数组a的长度是:"+a.length);
11 }
12 }
【代码说明】第5行初始化数组,第6~9行通过循环输出数组中的元素。
【运行效果】
a[0]=2;
a[1]=4
a[2]=6
a[3]=8
a[4]=10;
数组a的长度是:5
输出另一个数组的程序代码如下。
01 public class arrary7
02 {
03 public static void main(String[]args)
04 {
05 int[]b=new int[]{1,3,5,7,9};
06 for(int i=0;i<b.length;i++)
07 {
08 System.out.println("b["+i+"]="+b[i]);
09 }
10 System.out.println("数组b的长度是:"+b.length);
11 }
12 }
【代码说明】第5行初始化数组b,第6~9行输出数组中各个元素。【运行效果】
b[0]=1
b[1]=3
b[2]=5
b[3]=7
b[4]=9
数组b的长度是:5
在第二个要求里,必须要创建一个新的数组c,接着就是操作前两个数组的元素。这个要求内的程序段在前面的小节内已经详细举过例子,下面看程序段。
01 public class arrary8
02 {
03 public static void main(String[]args)
04 {
05 int[]a=new int[]{2,4,6,8,10};
06 int[]b=new int[]{1,3,5,7,9};
07 int[]c=new int[5];
08 for(int i=0;i<a.length;i++)
09 {
10 c[i]=a[i]*b[i];
11 }
12 for(int j=0;j<a.length;j++)
13 {
14 System.out.println("c["+j+"]="+(a[j]*b[j]));
15 }
16 System.out.println("数组c的长度是:"+c.length);
17 }
18 }
【代码说明】
第5~7行创建了3个数组,其中数组a和b创建时有默认值,数组c没有默认值。
第8~11行设置数组c的值,然后第12~15行输出数组c。
【运行效果】
c[0]=2;
c[1]=12
c[2]=30
c[3]=56
c[4]=90;
数组c的长度是:5
这个程序是一个数组内部各个对应的元素的操作,这在前面已经举过例子,此处不再详细描述。
第三个要求比起前两个,稍微复杂了点,但是可以通过分析,来编写程序段。先看下面的程序,然后再来分析。
01 public class arrary9
02 {
03 public static void main(String[]args)
04 {
05 int[]a=new int[]{2,4,6,8,10};
06 int[]b=new int[]{1,3,5,7,9};
07 for(int i=0;i<b.length;i++)
08 {
09 System.out.println("d["+i+"]="+(a[i]a[i]b[i]-b[i]));
10 }
11 }
12 }
【代码说明】读者在代码中没有看到数组c,因为本身数组c就是数组a和数组b中元素相乘的结果,所以第9行代码中用a[i]*b[i]代替数组c。
【运行效果】
d[0]=3
d[1]=45
d[2]=175
d[3]=441
d[4]=891
整个程序段其实与上一个程序段相似,只不过表达式比上一例稍微复杂。
上面三个程序段其实可以用一个程序段来表示,这就涉及面向对象编程的理念。代码如下所示。
01 public class arrary10
02 {
03 int[]a=new int[]{2,4,6,8,10};
04 int[]b=new int[]{1,3,5,7,9};
05 public static void main(String[]args)
06 {
07 arrary10 w=new arrary10();
08 w.print1();
09 w.print2();
10 w.print3();
11 w.print4();
12 }
13 void print1()
14 {
15 for(int i=0;i<b.length;i++)
16 {
17 System.out.println("b["+i+"]="+b[i]);
18 }
19 System.out.println("数组b的长度是:"+b.length);
20 }
21 void print2()
22 {
23 for(int i=0;i<a.length;i++)
24 {
25 System.out.println("a["+i+"]="+a[i]);
26 }
27 System.out.println("数组a的长度是:"+a.length);
28 }
29 void print3()
30 {
31 for(int i=0;i<b.length;i++)
32 {
33 System.out.println("c["+i+"]="+(b[i]*a[i]));
34 }
35 System.out.println("数组c的长度是:"+b.length);//因为数组c和b相同,可以用b.length
36 }
37 void print4()
38 {
39 for(int i=0;i<b.length;i++)
40 {
41 System.out.println("d["+i+"]="+(a[i]a[i]b[i]-b[i]));
42 }
43 }
44 }
【代码说明】第35行在获取数组c的长度时,使用了b.length,因为数组c和数组b其实一样长,这里简化了代码,直接输出数组b的长度,同样也是数组c的长度。
【运行效果】
b[0]=1
b[1]=3
b[2]=5
b[3]=7
b[4]=9
数组b的长度是:5
a[0]=2
a[1]=4
a[2]=6
a[3]=8
a[4]=10
数组a的长度是:5
c[0]=2
c[1]=12
c[2]=30
c[3]=56
c[4]=90
数组c的长度是:5
d[0]=3
d[1]=45
d[2]=175
d[3]=441
d[4]=891
每个功能使用一个方法来实现,在主运行函数内,利用创建新对象,再使用对象的方法来引用功能函数。这样,整个程序看起来就很清晰明了,并且功能模块很独立。不会因为修改一处而导致全部代码修改,这也正是面向对象程序开发的一个最大优势。
在编写有关数组方面的程序时,主要是操作数组中的元素。而在实际的程序开发中,不可能像前面举的例子一样简单。在实际开发工作中,要涉及的不单纯是基本类型的数组,绝大多数会遇到数组中元素的数据类型是对象类型。至于对象类型的使用,其实同基本类型的数组一样,只不过是数据类型不同而已,对象数组将会在后面的章节中讲解。