封装计算数组的类_初学

做了个关于封装数组的作业练习来分享下!

我在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等)

就不卖关子啦,解决上述问题就需要重载。     

猜你喜欢

转载自blog.csdn.net/qq_17107171/article/details/79673351
今日推荐