Java基础巩固(函数、函数的重载、数组、冒泡与选择排序、二分法查找、Array数组工具、二维数组)

一、函数:

函数(方法):

函数的作用: 提高功能代码的复用性。

需求:做两个数的加法功能。

目前存在的问题:以下的代码都是在做一个加法功能,而
这里加法功能 的代码目前是没有任何的复用性的。

解决方案: 如果一个功能的代码要被复用起来,那么这时候可以把
这里的功能代码封装起来,在java中把功能代码封装起来的是以函数的形式体现的。


函数的定义格式:
    
    修饰符  返回值类型  函数名(形式参数..){
        需要被封装的功能代码;
        return 结果;
    }

  

如何定义一个函数:
    1. 返回值类型。
    2. 是否存在未知的参数(是否存在要由调用者确定的参数)。---->形式参数


分析函数:
    public static int add(){
        int a =2;
        int b =3;
        return a+b;
    }
    
    修饰符: public static

    返回值类型: int 。 返回值类型就是指函数运行完毕后,返回的结果的数据类型。
    注意: 某些函数是没有结果返回给调用者的,那么这时候返回值类型是void。

    
    函数名: add   函数名的作用:如果需要调用该函数就需要使用的函数名。 函数名只要符合标识符的命名规则即可。
             函数名的命名规范: 首单词全部小写,其他单词的首字母大写,其他小写。
    
    形式参数: 如果一个函数在运行的时候,存在着数据是要调用者确定 的,那么这时候就应该定义形式参数。

    return : 把一个结果返回给调用者。

函数的作用: 为了提高功能代码的复用性。

 

函数的定义格式:

修饰符  返回值类型  变量名(形式参数){

函数体

}

 

函数的特点:

1. 函数是把一个功能的代码 封装起来以达到提高功能 代码的复用性。

2. 函数定义好之后,需要调用才能执行的。

3. 如果一个函数没有返回值类型,那么就使用void关键字表示。

4.函数定义好之后,是需要被调用才会执行的。 main函数是有jvm调用的,不需要我们手动调用。

 

 

注意: 如果一个函数的返回值类型是具体的数据类型,那么该函数就必须要保证在任意情况下都保证有返回值。(除了返回值类型是void以外)

 

return 关键字的作用:

1. 返回数据给函数的调用者。

2. 函数一旦执行到了return关键字,那么该函数马上结束。 (能结束一个函数)

 

注意:一个函数的返回值类型 是void,那么也可以出现return关键字,但是return关键字的后面不能有数据。

 

break关键字与return关键字的区别:

1.break关键字是结束一个循环。

2. return关键字是结束一个函数。

 

二、函数的重载

在一个类中出现两个或者两个以上的同名函数,这个称作为函数的重载。

 

函数重载的作用: 同一个函数名可以出现了不同的函数,以应对不同个数或者不同数据类型的参数。

 

函数重载的要求:

1. 函数名一致。

2. 形参列表不一致。(形式参数的个数或者是对应的数据类型不一致)

3. 与函数的返回值类型是无关的。

//函数的重载
public static double add(int a, int b){

System.out.println("两个参数的总和: "+ (a+b));

return 3.14;

}

//重复定义

public static int add(int a, double b){

System.out.println("double参数的总和: "+ (a+b));

return 12;

}


 

三、数组

数组:数组是存储同一种数据类型数据的集合容器。

 

数组的定义格式:

数据类型[]  变量名 = new 数据类型[长度];

 

分析数组:   

 左边: int[] arr    声明了一个int类型的的数组变量,变量名为arr。

int : 表示该数组容器只能存储int类型的数据。

[] : 这是一个数组类型。

arr : 变量名.

右边:new int[50]; 创建了一个长度为50的int类型数组对象。

new : 创建数组对象的关键字。

int:  表示该数组对象只能存储int类型数据。

[]: 表示是数组类型。

50 : 该数组最多能存储50个数据。数组的容量。

 

数组的好处: 对分配到数组对象中每一个数据都分配一个编号(索引值、角标、下标),索引值的范围是从0开始,最大是: 长度-1.

数组中最常见的问题:
    
    1. NullPointerException 空指针异常
    原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。\

    2. ArrayIndexOutOfBoundsException 索引值越界。
    原因:访问了不存在的索引值。

 

局部变量: 如果一个变量是在一个方法(函数)的内部声明的,那么该变量就是一个局部变量。

成员变量: 成员变量就是定义在方法之外,类之内的.


数组的初始化方式:
    
    动态初始化:
        数据类型[] 变量名 = new 数据类型[长度];

    静态初始化:    
        数据类型[] 变量名 = {元素1,元素2.....};


如果程序一开始你就已经确定了数据,那么这时候建议使用静态初始化。如果

数据一开始还不太明确,这时候就建议使用动态初始化。

数组内存分析:



数组出现空指针原因分析:



四、冒泡排序与选择排序

冒泡排序:冒泡排序的思想就是使用相邻的两个 元素挨个比较一次,符合条件交换位置。

public static void bubbleSort(int[] arr){
		// 把最大值放在最后一个位置
		for(int j = 0 ; j<arr.length-1 ; j++){ //控制轮数
			for(int i = 0 ; i<arr.length-1-j  ; i++){  // 找出一个最大值  
				//相邻的元素比较
				if(arr[i]>arr[i+1]){
					int temp  = arr[i];
					arr[i] = arr[i+1];
					arr[i+1] = temp;
				}
			}
		}



选择排序(直接排序):使用一个元素与其他 的元素挨个比较一次,符合条件交换位置。

public static void selectSort(int[] arr){
		
		//把最大值放在首位置。
		for(int j = 0; j<arr.length-1; j++){  //  控制的是轮数。
			for(int i = j+1 ; i<arr.length ; i++){ // 找出最大值
				if(arr[i]>arr[j]){
					//交换位置
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}

五、折半查找法(二分法)

使用前提必需是有序的数组。

public static int halfSearch(int[] arr, int target){
		//定义三个变量分别记录最大、最小、中间的查找范围索引值
		int max = arr.length-1;
		int min = 0;
		int mid = (max+min)/2;
		while(true){
			if(target>arr[mid]){
				min = mid+1;
			}else if(target<arr[mid]){
				max = mid -1;
			}else{
				//找到了元素
				return mid;
			}

			//没有找到的情况
			if (max<min){
				return -1;
			}

			//重新计算中间索引值
			mid = (min+max)/2;
		}
	
	}

六、Array数组工具

public static void main(String[] args) 
	{
		int[] arr = {12,3,1,10,8};
		//排序的方法
		Arrays.sort(arr);  
		String info = Arrays.toString(arr);
		System.out.println("数组的元素:"+ info);

		// 1, 3, 8, 10, 12  
		int index = Arrays.binarySearch(arr,9);// 二分法查找 : 如果能在数组中找到对应 的元素,那么就返回该数据的索引值,如果没有找到那么就返回一个负数表示。
		System.out.println("找到的索引值:"+ index);
		
	}

七、二维数组

二维数组: 二维数组就是数组中的数组。

二维数组 的定义格式:
    
    数据类型[][] 变量名 = new 数据类型[长度1][长度2];


二维数组 的初始化方式:
    
    动态初始化:
        
        数据类型[][] 变量名 = new 数据类型[长度1][长度2];


    静态初始化:

        数据类型[][]  变量名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...} ..}




猜你喜欢

转载自blog.csdn.net/linjiehuijh/article/details/79918631
今日推荐