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
每个功能使用一个方法来实现,在主运行函数内,利用创建新对象,再使用对象的方法来引用功能函数。这样,整个程序看起来就很清晰明了,并且功能模块很独立。不会因为修改一处而导致全部代码修改,这也正是面向对象程序开发的一个最大优势。
在编写有关数组方面的程序时,主要是操作数组中的元素。而在实际的程序开发中,不可能像前面举的例子一样简单。在实际开发工作中,要涉及的不单纯是基本类型的数组,绝大多数会遇到数组中元素的数据类型是对象类型。至于对象类型的使用,其实同基本类型的数组一样,只不过是数据类型不同而已,对象数组将会在后面的章节中讲解。