首先引人一个问题,使用方法的优点有哪些?
我们先看一个不使用方法进行封装过程的例子,在这个例子中,我们会输入三个人的数据,然后分别找出当中年龄、体重、身高的。
import java.util.Scanner;
public class MaxHwa {
public static void main(String[] args) {
Scanner stdIn =new Scanner(System.in);
// 定义三个数组,分别用来储存三个人的基本信息
int[] height=new int[3];
int[] weight= new int[3];
int[] age=new int[3];
// 通过for循环为height数组里的每个元素手动赋值
for(int i=0;i<3;i++){
System.out.print("请输入"+(i+1)+"个人的身高:");
height[i]=stdIn.nextInt();
System.out.print("请输入"+(i+1)+"个人的体重:");
weight[i]=stdIn.nextInt();
System.out.print("请输入"+(i+1)+"个人的年龄");
age[i]=stdIn.nextInt();
}
// 定义三个变量分别用来储存身高、体重、年龄的最大值,初始值为数组的第一个元素
int maxHeight = height[0];
int maxWeight = weight[0];
int maxAge = age[0];
// 与数组中的其它元素进行比较,若其它元素大于初始值,则将初始值替换为其它元素的值
if(height[1] > maxHeight) {
maxHeight = height[1];
}
if(height[2] > maxHeight) {
maxHeight = height[2];
}
if(weight[1] > maxWeight) {
maxWeight = weight[1];
}
if(weight[2] > maxWeight) {
maxWeight = weight[2];
}
if(age[1] > maxAge) {
maxAge = age[1];
}
if(age[2] > maxAge) {
maxAge = age[2];
}
System.out.println(maxAge);
System.out.println(maxHeight);
System.out.println(maxWeight);
}
}
可以看出以上存在着很多几乎一样的代码,”代码复制“是程序质量不良的一种表现,为什么这样说呢?首先这会造成成代码的冗余(看起来怎么这么长呢),其次也不方便维护,比如当我们需求发生更改的时候,我们从求数据的最大值,改为求数据的最小值,我们就需要一个一个的去修改,几个的话还好,几十上百个呢?势必会带来繁重的工作量。
我们可以把以上相同的操作进行共性抽取,封装成方法,然而这些几乎一模一样的方法里面具有不同的东西(就是变量),我们可以将变量作为方法的参数,让我们看下改进之后的代码。
import java.util.Scanner;
public class MaxHwa {
public static int max(int a, int b, int c) {
int max = a;
if (b > max) max = b;
if (c > max) max = c;
return max;
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
// 定义三个数组,分别用来储存三个人的基本信息
int[] height = new int[3];
int[] weight = new int[3];
int[] age = new int[3];
// 通过for循环为height数组里的每个元素手动赋值
for (int i = 0; i < 3; i++) {
System.out.print("请输入第" + (i + 1) + "个人的身高:");
height[i] = stdIn.nextInt();
System.out.print("请输入第" + (i + 1) + "个人的体重:");
weight[i] = stdIn.nextInt();
System.out.print("请输入第" + (i + 1) + "个人的年龄");
age[i] = stdIn.nextInt();
}
System.out.println(max(age[0], age[1], age[2]));
System.out.println(max(height[0], height[1], height[2]));
System.out.println(max(weight[0], weight[1], weight[2]));
}
}
可以看出代码变的更加简洁,如果我们需要更改需求,比如之前是求的最大值,改为求最小值,我们只需要在定义的max方法中进行修改,从而实现一处该处处该的效果,更加方便进行维护。
总结一下就是:1.方便代码重复调用
2.减少代码冗余性,使代码更加简洁。
3.更加方便地实现代码地维护。



