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


每个功能使用一个方法来实现,在主运行函数内,利用创建新对象,再使用对象的方法来引用功能函数。这样,整个程序看起来就很清晰明了,并且功能模块很独立。不会因为修改一处而导致全部代码修改,这也正是面向对象程序开发的一个最大优势。

在编写有关数组方面的程序时,主要是操作数组中的元素。而在实际的程序开发中,不可能像前面举的例子一样简单。在实际开发工作中,要涉及的不单纯是基本类型的数组,绝大多数会遇到数组中元素的数据类型是对象类型。至于对象类型的使用,其实同基本类型的数组一样,只不过是数据类型不同而已,对象数组将会在后面的章节中讲解。