做了个关于封装数组的作业练习来分享下!
我在eclipse一个包中创建了两个.Java文件,一个是ArrayUtil(包含一些数组的计算),另一个是测试ArrayUtil的ArrayUtilTest
下面是ArrayUtil代码:
package 封装计算数组的类;
public class ArrayUtil {
/*一、编写出关于求数组的最大值的方法*/
public double getMax(double[] arr) {
double maxIndex = arr[0];//定义最大值为该数组的第一个数
//遍历数组
for(int i=0;i<arr.length;i++) {
//将arr中的值与数组进行比较,获取最大值
if(maxIndex<arr[i]) {
maxIndex=arr[i];
}
}
//返回最大值
return maxIndex;
}
/*二、编写出关于求数组的最小值的方法*/
public double getMin(double[] arr) {
double minIndex = arr[0];//定义第一个数是最小值
for(int i=0;i<arr.length;i++) {
if(minIndex>arr[i]) {
minIndex=arr[i];
}
}
return minIndex;
}
/*三、遍历数组元素的方法*/
public void printArray(double[] arr) {
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
/*四、遍历数组平均数的方法*/
public double avyArray(double[] arr) {
double sumArr = 0;//初始化求和数
double avyArr = 0;//初始化平均数
for(int i=0;i<arr.length;i++) {
sumArr=sumArr+arr[i];
}
avyArr =sumArr/arr.length;
return avyArr;
}
/*补充:
* 求平均数也可以调用下面总和的值
* public double avyArray(double[] arr) {
* double sum = getSum(arr);
* return sum / arr.length;
* }
*/
/*五、求数组总和的方法*/
public double getSum(double[] arr) {
double sum=0;
for(int i = 0;i<arr.length;i++) {
sum += arr[i];
}
return sum;
}
/*五、求数组反转的方法*/
public double[] reverse(double[] arr) {
double reverseArr[]=new double[arr.length];
int j=arr.length-1;//获取最后一位数组元素的下标值
for(int i=0;i<arr.length;i++){
reverseArr[j]=arr[i];
j--;//依次递减j的值,进而实现reverseArr倒着接收原数组arr
}
return reverseArr;
}
/*补充:
* 数组复制的方法还有
* public double[] reverse(double[] arr) {
* for(int x = 0;y = arr.length -1;x<y;x++,y--){
* double temp = arr[x];
* arr[x] = arr[y];
* arr[y] = temp;
* }
* retern arr;
* }
* */
/*六、数组复制的方法*/
public double[] copy(double[] arr) {
double[] arr1 = new double[arr.length];
for(int i = 0;i<arr.length;i++) {
arr1[i]=arr[i];
}
return arr1;
}
/*七、数组的排序*/
//这里写的冒泡排序
public double[] sort(double[] arr) {
for(int i =0;i < arr.length - 1;i++)
{
for(int j = 0;j < arr.length - 1-i;j++)// j开始等于0,
{
if(arr[j] > arr[j+1])
{
int temp = (int) arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
}
下面是ArrayUtilTest的测试代码:
package 封装计算数组的类;
public class ArrayUtilTest {
public static void main(String[] args) {
//给原数组arr赋值
double[] arr = new double[] {3,6,1,7,8};
//对象实例化
ArrayUtil au=new ArrayUtil();
//调用方法
//一、用变量接收最大值,并打印
double max =au.getMax(arr);
System.out.println("最大值:"+max);
//二、用变量接收最小值,并打印
double min =au.getMin(arr);
System.out.println("最小值:"+min);
//三、调用遍历数组的方法
System.out.print("遍历数组:");
au.printArray(arr);
//四、用变量接收平均值,并打印
double avy =au.getMin(arr);
System.out.println(" ");
System.out.println("平均值:"+avy);
//五、调用求数组总和的方法
double sum =au.getSum(arr);
System.out.println("最求和值:"+sum);
//六、调用数组复制的方法
double[] copy =au.copy(arr);
//调用数组遍历打印arr1数组(copy方法中)
System.out.print("打印复制的数组:");
au.printArray(copy);
//换行
System.out.println(" ");
//七、调用冒泡排序的方法
double[] sort =au.sort(arr);
//调用数组遍历打印arr1数组
System.out.print("排序后的数组");
au.printArray(sort);
}
}
下面是eclipse的显示结果:
最大值:8.0
最小值:1.0
遍历数组:3.0 6.0 1.0 7.0 8.0
平均值:1.0
最求和值:25.0
打印复制的数组:3.0 6.0 1.0 7.0 8.0
排序后的数组1.0 3.0 6.0 7.0 8.0
--补充(关于冒泡排序的封装增加形式参数,控制排序由大到小还是由小到大的问题):
ArrayUtil中的代码:
public void sort(double[] arr,String desc) {
if(desc == "asc") { //顺序排列,ascend;从小到大
for(int i =0;i < arr.length - 1;i++)
{
for(int j = 0;j < arr.length - 1-i;j++)// j开始等于0,
{
if(arr[j] > arr[j+1])
{
int temp = (int) arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}else if(desc == "desc") {//从大到下
for(int i =0;i < arr.length - 1;i++)
{
for(int j = 0;j < arr.length - 1-i;j++)// j开始等于0,
{
if(arr[j] < arr[j+1])
{
int temp = (int) arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}else {
System.out.println("您输入的排序方式有误");
}
}
ArrayUtilTest中的代码:
//七、调用冒泡排序的方法
au.sort(arr,"desc");
发现问题:
- 其中,以下代码被重复使用:
int temp = (int) arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
- 那么,为了扩展性和解决代码重复问题,也可以将上述代码构造为一种方法:
//八、数组中指定位置元素的交换
//交换哪个数组,交换两个元素分别是,这而交换arr中下标index为i和j的元素
public void swap(double[] arr,int i,int j){
double temp = arr[i];
arr[i] = arr[j+1];
arr[j+1] = temp;
}
/*那么:
* 就可以使用swap(arr,j,j+1);替以下代码换掉
* int temp = (int) arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
*/
结尾:学习ing哈,当前数组封装绝对还有不足,
例如:上述数组是double类型,接收其他类型可能出错或得不到想要的类型(接收int被强制转换为double等)
就不卖关子啦,解决上述问题就需要重载。