java 面向对象练习4 匿名对象与自定义数组工具类

/*

  • 一,理解万事万物皆对象
  • 1,在java中,我们将功能,结构等封装到类中,通过类的实例化来调用具体的功能结构
  • 例如Scanner,String
  • 文件路径file,网络地址 URL都是类
  • 2,在java语言与前端(html,css,js),后端数据库交互时,前后端的结构在java端交互时,都体现为类,对象。
  • 二,匿名对象
  • 1,通过new 类名()来创建一个对象,没有显式的赋一个变量名,直接调用方法即为匿名对象
  • 2,特征:匿名对象只能调用一次。
  • 3,使用:如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象
  • 开发中经常将匿名对象作为实参传递给一个方法调用
    */
package com.atguigu.contact;
import java.util.*;
public class Object4 {
    public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		new Phone().play();//匿名对象使用必须new一次创建对象,但不必命名
		new Phone().call();//匿名对象每次使用都要new一次,所以适合调用一次的情况
		new Phone().price = 1699;//
		new Phone().showPrice();//因为是新对象所以price还是初始值0.0
		//匿名对象的使用
		PhoneShop show = new PhoneShop();
		show.showPhone(new Phone());//此处相当于将匿名对象的首地址值赋给了showPhone的形参p
		//形参p可以在方法内被多次使用,间接实现了匿名对象的多次使用。
		
		
		//测试自定义int数组工具类
		int[] arr = new int[] {23,41,12,-9,0,34,81,4,9,2,77,14,19,45,85};
		IntArrayUtil test = new IntArrayUtil();
		test.print(arr);
		System.out.println(test.search(arr,34));
		test.search(arr, 23);
		test.sort(arr);
		test.print(arr);
		test.reverse(arr);
		test.print(arr);
		test.sort(arr);//要用二分查找排序,首先数组要有序,而且查找的自定义方法设置的是正序
		int k = test.binarySearch(arr, 0);
		if(k < 0) {
			System.out.println("未找到");
		}else {
			System.out.println("找到目标在数组的角标:" + k);
		}
		System.out.println("请输入随机数组的长度");
		int i = scan.nextInt();
		int[] arr1 = new int[i];
		test.setRandomValue(arr1);
		test.print(arr1);
		test.sort(arr1);
		test.print(arr1);
		
	}    
}


class Phone{
	double price = 1999;
	public void play(){
		System.out.println("使用手机玩游戏");
	}
	public void call() {
		System.out.println("使用手机打电话");
	}
	public void showPrice() {
		System.out.println("手机价格是:" + price);
	}	
}

 class PhoneShop{
	
	 public void showPhone(Phone p) {
		p.call();
		p.play();
		p.showPrice();
	}
 }
 
//创建自定义数组工具类
 class IntArrayUtil{
	 //求数组最大值
	 public int maxValue(int[] arr) {
		 int max = arr[0];
		 for (int i = 0; i < arr.length; i++) {
			if(arr[i] >= max) {
				max = arr[i];
			}
		}
		 return max;
	 }
     //求数组最小值
	 public int minValue(int[] arr) {
		 int min = arr[0];
		 for (int i = 0; i < arr.length; i++) {
			if(arr[i] <= min) {
				min = arr[i];
			}
		}
		 return min;
	 }
     //求数组总和
	 public int sumValue(int[] arr) {
		 int sum = arr[0];
		 for (int i = 0; i < arr.length; i++) {			
				sum += arr[i];			
		}
		 return sum;
	 }
     //求数组平均值	 
	 public int averageValue(int[] arr) {
		 int average;
		 average = sumValue(arr) / arr.length;
		 return average;
	 }
     //数组排序
	 public void sort(int[] array) {
		 for (int i = 0; i < array.length -1; i++) {
				int k = i;
				int temp = 0;
				for (int j = i; j < array.length; j++) {
					if(array[j] < array[k]) {					
						k = j;//如果找到一个更小的值则K的角标变换为次值的角标,最后k是最小值的角标
					}
				}
				temp = array[i];
				array[i] = array[k];
				array[k] = temp;//将找到的最小值与本次外层循环的第一个数值交换位置
			}
	 }
     //数组反转
     public void reverse(int[] arr) {
    	 for (int i = 0; i < arr.length / 2; i++) {
  			   int temp;
  			   temp = arr[i];
  			   arr[i] = arr[arr.length - 1 - i];
  			   arr[arr.length - 1 - i] = temp;
  			}
	 }
	 //数组遍历输出
     public void print(int[] arr) {
    	 for (int i = 0; i < arr.length; i++) {
 			System.out.print(arr[i] + " ");
 			}
    	 System.out.println("\n");
     }
	 //数组随机赋值,范围0-100
     public void setRandomValue(int[] arr) {
    	 for (int i = 0; i < arr.length; i++) {
  			arr[i] = (int)(Math.random() * 101);
  			}
     }
     //数组二分查找
     public int binarySearch(int[] arr,int dest) {    	    
 	    int start = 0;
 	    int end = arr.length - 1;
 	    for(;start <= end;) {//或者使用while(start <= end)
 	    	int middle = (start + end) / 2;
 	    	if(arr[middle] == dest) {
 	     	System.out.println(dest + "在数组中的角标是" + middle); 	    	
 	    	return middle;	
 	    	}else if(dest < arr[middle]) {
 	    	end = middle - 1;//通过改变头尾赋值来不断缩小范围,最终收敛到start=end结束循环
 	    	}else if(dest > arr[middle]) {
 	    	start = middle + 1;	
 	    	}	    	
 	    }	  
 	    	return -1; 	    	
	 }
     //数组遍历查找,不需要数组先排序
     public int search(int[] arr, int dest) {
    	 for (int i = 0; i < arr.length; i++) {
			if(arr[i] == dest) {
				System.out.println(dest + "目标在数组中的角标是:" + i);
				return i;
			}
		}
    	 return -1;
     }
         
 }
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页