上一篇:以线及面--进入二维数组的世界 | 带你学《Java面向对象编程》之十六
【本节目标】
通过阅读本节,你将了解到数组在方法调用中的内存变化,初步了解到程序“设计”的含义,并掌握使用方法完成对数组的操作以满足某些需求的能力。
数组与方法
对于引用数据类型而言,主要的特点是可以与方法进行引用传递,而数组本身也属于引用数据类型,所以自然也可以通过方法实现引用传递操作。
范例:实现一个数组的引用传递
public class ArrayDemo {
public static void main (String args[ ]) {
int data [] = new int [] {1,2,3,4,5} ;
printArray(data) ; //传递数组
}
//要求接收一个int型的数组
public static void printArray(int temp []) {
for (int x = 0 ; x < temp.lenght ; x ++) {
System.out.println(temp[x]) ;
}
}
}
图一 执行结果一
对于此时的引用传递具体的内存关系如下。
图二 内存分析结果一
既然可以通过方法来接收一个数组,那么也就可以通过方法返回一个数组对象,那么此时只需要在方法的返回值类型上进行控制即可。
范例:定义方法返回数组
public class ArrayDemo {
public static void main (String args[ ]) {
int data [] = initArray() ; //通过方法可以获得数组内容
printArray(data) ; //传递数组
}
public static int [] initArray () {
int arr [] = new int [] {1,2,3,4,5} ;
return arr ; //返回一个数组
}
//要求接收一个int型的数组
public static void printArray(int temp []) {
for (int x = 0 ; x < temp.lenght ; x ++) {
System.out.println(temp[x]) ;
}
}
}
图三 执行结果二
接下来针对于此程序进行内存关系分析。
图四 内存分析结果二
范例:通过方法修改数组内容
public class ArrayDemo {
public static void main (String args[ ]) {
int data [] = new int [] {1,2,3,4,5}
changeArray(data) ; //修改数组内容
printArray(data) ; //传递数组
}
public static void changeArray(int arr[]) {
for (int x = 0 ;x < arr.length ; x ++) {
arr[x] *= 2 ; //每个元素的内容乘2保存
}
}
//要求接收一个int型的数组
public static void printArray(int temp []) {
for (int x = 0 ; x < temp.lenght ; x ++) {
System.out.println(temp[x]) ;
}
}
}
图五 修改数组内容执行结果
本程序的内存关系如下:
图六 内存分析结果图三
案例
随意定义一个int数组,要求可以计算出这个数组元素的总和、最大值、最小值、平均值。
对于此程序最基本的实现如下:
public class ArrayDemo {
public static void main (String args[ ]) {
int data [] = new int [] {1,2,3,4,5}
int sum = 0 ;
double avg = 0.0 ;
int max = data[0] ; //假设第一个是最大值
int min = data[0] ; //假设第一个是最小值
for(int x = 0 ; x < data.length ; x ++){
if(data[x] > max) { //max地位改变
max = data[x] ;
}
if(data[x] < min) {
min = data[x] ;
}
sum += data[x] ;
}
avg = sum / data.length ;
System.out.println(“数组内容总和:” + sum) ;
System.out.println(“数组内容平均值:” + avg) ;
System.out.println(“数组内容最大值:” + max) ;
System.out.println(“数组内容最小值:” + min) ;
}
public static void printArray(int temp []) {
for (int x = 0 ; x < temp.lenght ; x ++) {
System.out.println(temp[x]) ;
}
}
}
图七 求值结果图
主方法所在的类往往被称为主类,那么既然是主类肯定不希望涉及到过于复杂的功能。在进行开发的过程当中,主方法本身就相当于是一个客户端,而对于客户端的代码应该尽量简单一些,所以这个时候最好的做法是将这一系列的计算过程交给单独的程序类去完成。
范例:改善操作设计
class ArrayUtil { //是一个操作工具的类
private int sum ; //保存总和
private double avg ; //保存平均值
private int max ; //保存最大值
private int min ; //保存最小值
public ArrayUtil(int data[]) { //进行数组计算
this.max = data[0] ; //假设第一个是最大值
this.min = data[0] ; //假设第一个是最小值
for(int x = 0 ; x < data.length ; x ++){
if(data[x] > max) { //max地位改变
this.max = data[x] ;
}
if(data[x] < min) {
this.min = data[x] ;
}
this.sum += data[x] ;
}
this.avg = this.sum / data.length ;
}
public int getSum() {
return this.sum ;
}
public double getAvg() {
return this.avg ;
}
public int getMax() {
return this.max ;
}
public int getMin() {
return this.min ;
}
}
public class ArrayDemo {
public static void main (String args[ ]) {
int data [] = new int [] {1,2,3,4,5}
ArrayUtil util = new ArrayUtil(data) ; //数据计算
System.out.println(“数组内容总和:” + util.getSum()) ;
System.out.println(“数组内容平均值:” + util.getAvg()) ;
System.out.println(“数组内容最大值:” + util.getMax()) ;
System.out.println(“数组内容最小值:” + util.getMin()) ;
}
}
图八 求值结果图二
此时的主类就好比我们使用的电脑一样,只关心如何操作,而具体的操作过程被类进行包装了。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学