2013年计算机二级Java一维数组学习教程_第2页

考试站(www.examzz.com)   【考试站:中国教育考试第一门户】   2013年6月25日
 5.1.5 传递数组到成员方法

  在定义类的成员方法时,其参数的数据类型可以是基本数据类型,也可以是数组、字符串和类对象等引用类型。在将数组作为形参时,形参的定义格式如下:

  访问控制符 返回值 方法名(数据类型[] 数组名)

  方法中数组形参的形式实际上是数组的声明格式,前面我们学习过数组初始化的一种形式就是用已初始化后的数组对一个新声明的数组进行初始化,数组做形参就是这种情况,因此,要求传递的实参,其数据类型应该与在方法中定义的形参的数据类型相同,同时,形参和实参会具有相同的物理存储地址,因此,形参和实参是同一个数组,当然,在成员方法中队形参数组中各个元素的任何修改,都会使传递给它的实参数组的各个元素值发生变化,这种参数的传递方式被称为“双向地址传递”。

  一般来说,如果成员方法的形参数据类型为基本数据类型,这时候参数传递方式是“单向值传递”,若果成员方法的形参数据类型为引用数据类型(数组,字符串、类对象等),则参数传递方式是“双向地址传递”。

  采用数组名作形参的方式修改[例5-3]。

  [例5-4]

  class Change{

  public void swap(int arr[]){

  System.out.println("交换前形参:\n arr[0]="+arr[0]+" arr[1]="+arr[1]);

  int temp;

  temp=arr[0];

  arr[0]=arr[1];

  arr[1]=temp;

  System.out.println("交换后形参:\n arr[0]="+arr[0]+" arr[1]="+arr[1]);

  }

  }

  public class Test5_4 {

  public static void main(String[] args) {

  int[] arr={5,8};

  Change c = new Change();

  System.out.println("交换前实参:\n arr[0]="+arr[0]+" arr[1]="+arr[1]);

  c.swap(arr);

  System.out.println("交换后实参:\n arr[0]="+arr[0]+" arr[1]="+arr[1]);

  }

  }

  运行结果为:

  交换前实参:

  arr[0]=5 arr[1]=8

  交换前形参:

  arr[0]=5 arr[1]=8

  交换后形参:

  arr[0]=8 arr[1]=5

  交换后实参:

  arr[0]=8 arr[1]=5

  从运行结果可以看出,对形参数组arr两个元素arr[0]和arr[1]的修改影响到了实参数组arr的两个元素arr[0]和arr[1]。这里需要注意的是,形参和实参的名字都是arr,需要区分哪个是形参,哪个是实参。

  向方法传递数组元素值的“单向值传递方式”和普通变量效果是一样的,因此,这种情况完全可以用普通变量来代替。在实际应用中,我们更多的是使用向方法传递数组名的“双向地址传递”方式。

  5.1.6 数组元素间的比较

  了解了数组元素的访问后,我们可以利用数组元素的遍历实现很多功能。

  1.数组最大值、最小值和平均值

  利用for循环遍历 数组的所有元素可以非常方便的求出数组的最大值、最小值和平均值。

  [例5-5]]求出一个数组的最大值、最小值、平均值

  import java.util.Scanner;

  class Array {

  //计算数组元素最大值

  public int getMax(int[] a){

  int max=a[0];

  for(int i=0;i  if(max  max=a[i];

  }

  }

  return max;

  }

  //计算数组元素最小值

  public int getMin(int[] a){

  int min=a[0];

  for(int i=0;i  if(min>a[i]){

  min=a[i];

  }

  }

  return min;

  }

  //数组元素求和

  public int getSum(int[] a){

  int sum=0;

  for(int i=0;i  sum+=a[i];

  }

  return sum;

  }

  //计算数组元素平均值,调用getSum方法

  public double getAverage(int[] a){

  double avg;

  //因为getSum(a)和a.length都是int类型,有了(*1.0)后可以使两个int类型的值按double计算

  avg=getSum(a)*1.0/a.length;

  return avg;

  }

  }

  public class Test5_5{

  public static void main(String args[]){

  //Sanner类是一个输入类,用于整数、实数、字符串等的输入

  Scanner scan = new Scanner(System.in);

  int[] a= new int[10];//初始化数组a

  System.out.println("请连续输入10个整数");

  //利用Scanner的 nextInt方法从键盘输入10个数

  //使用a.length的方式,避免数组下标越界异常的发生

  for(int i=0;i  System.out.print("第"+(i+1)+"个整数:");

  a[i]=scan.nextInt();

  }

  Array myArray = new Array();

  System.out.println("数组的最大值为:"+myArray.getMax(a));

  System.out.println("数组的最小值为:"+myArray.getMin(a));

  System.out.println("数组的和为:"+myArray.getSum(a));

  System.out.println("数组的平均值为:"+myArray.getAverage(a));

  }

  }

  这里我们将对数组元素所做操作集中在一个类Array中实现,在需要使用这些方法的时候只要生成类Array的类对象,通过该类对象就可以调用这些方法了。而不是将这些方法放到主类中实现,直接通过主类的main方法调用。这是一种良好的编程习惯,便于代码复用,应予以提倡。

  程序中使用到了Scanner类,下面予以介绍。

  Scanner scan = new Scanner(System.in);

  定义一个Scanner类的类对象,在定义过程中,Scanner有多个构造方法,这里我们使用的是其中一个,传递的参数System.in是标准输入,即从键盘输入。scan.nextInt()表示从键盘上读入一个整数,除此之外,Scanner还支持doble,float等数据类型数据的读入,分别对应方法nextDouble(),nextFloat()。

表5-1 Scanner类的常用方法

方法

说明

public int nextInt()

获取一个int型整数

public long nextLong()

获取一个long型整数

public foloat nextFloat()

获取一个单精度实数

public double nextDouble()

获取一个双精度实数

public String next()

获取一个字符串

  利用表5-1中的方法可以实现多种数据类型数组的读取,特别注意,方法next的返回值是String类型。


相关文章