黑马程序员 笔记(四)——函数和数组
来源:互联网 发布:大鹏网络开车小视频 编辑:程序博客网 时间:2024/05/18 12:04
函数
一、函数的概述
1、 函数的定义:
函数就是定义在类中的具有特定功能的一段独立小程序。函数也称为方法。
2、 函数的意义:
在写程序时,操作不同数据使用的是同一种方法时,可以将这个方法定义成一个函数,这样避免了代码的重复,提
高了代码的复用性。
3、 函数的格式:
修饰符返回值类型函数名(参数类型形式参数1,参数类型形式参数2,)
{
执行语句;
return返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该值会返回给调用者。
注:当函数中没有值返回(如直接打印输出结果)时,返回值类型用void,并且可以省略return语句。
4、 函数的特点:
1)定义函数可以将功能代码进行封装
2)便于对该功能进行复用
3)函数只有被调用才会被执行
4)函数的出现提高了代码的复用性
5)对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注:函数中只能调用函数,不可以在函数内部定义函数。定义函数时,函数的结果应该返回给调用者,交由调用者处理。
二、函数的应用
1、 如何定义函数:
①明确该功能运算完的结果是什么类型。
②明确是否需要传递参数参与运算。
三、函数的重载
1、定义:
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
2、重载的特点:与返回值类型无关,只看参数列表
3、重载的好处:方便于阅读,优化了程序设计
4、重载使用的场合:
当定义的功能相同,但参与运算的未知内容不同。此时只定义一个函数名称,通过参数列表来区分。
注:函数的参数是有顺序的,顺序不同也算重载,重载和返回值类型没关系。虚拟机会根据参数列表自动匹配想对象的函数。
(代码诠释) OverLoadedFunctionDemo
/*需求:定义一个函数实现两个或三个整数(int类型)的比较,将较大的值打印输出。 通过本例来理解函数重载的定义步骤:①明确该功能运算完的结果是什么类型:直接打印结果,所以无结果返回 用void修饰 ②明确是否需要传递参数参与运算。进行数据比较,需要调用者传递参数。*/class OverLoadedFunctionDemo {public static void compare(int x,int y)/*自定义函数实现比较功能,因为是在主函数(静态)中调用,所以要用static修饰。*/{int z = (x>y)?x:y;System.out.println(x+"和"+y+"中,比较大的数字是"+z);}public static void compare(int x,int y,int m){if (x>y && x>m)System.out.println(x+"和"+y+"和"+m+"中最大的数是"+x);else if (y>x && y>m)System.out.println(x+"和"+y+"和"+m+"中最大的数是"+y);else if (m>x && m>y)System.out.println(x+"和"+y+"和"+m+"中最大的数是"+m);}public static void main(String[] args) //主函数{compare(6,9);//调用compare函数,虚拟机会根据参数列表自动匹配想对象的函数。compare(88,66,99);}}/*运行结果========================================6和9中,比较大的数字是988和66和99中最大的数是99========================================*/
数组
一、数组(概述—内存结构)
1、定义:同一种类型数据的集合。其实数组就是一个容器。
2、数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
3、格式:
①元素类型[]数组名 =new元素类型[元素个数或数组长度];
eg: int[] arr = new int[3];
②元素类型[]数组名 = new元素类型[]{元素,元素,……};
注:此格式在明确数组内容时使用。
eg:int[] arr1 = new int[]{1,3,45,5,6,7};
int[] arr2 = new int{1,3,45,5,6,7} ;
③元素类型[]数组名 = {元素,元素,元素,元素,……}
4、数组在内存中的存贮:
(1)堆:①存放用new产生的数据。
② 当引用该数组的变量执行变量名=null该数组为垃圾值,由虚拟机启动垃圾回收机制进行回收。
注:堆内的数据都有默认的初始值。(int是0,double是0.0,long是0.0,boolean是false)
如: int[] arr1 = new int[3];中开辟的三个空间
(2)栈:①存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中。(数据使用完,会自动释放)
如:int[] arr1 = new int[3];中的arr1,它保存的是那个三个空间的首地址。称为arr1引用了int[3]数组。
二、数组(静态初始化——常见问题)
1、数组的初始化:
静态初始化:创建一个数组实体,并赋值。eg: int[] arr = new []{1,3,4,6,8};
默认初始化:只创建数组实体,不赋值。此时会自动赋默认值。
eg: int[] arr1 = new int[3];
2、常见问题:
①ArrayIndexOutOfBoundsException:角标越界,访问到了数组中不存在的角标。
eg:int[] arr = new int[2];
System.out.println(arr[3]);
②NullPointerException:空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。
eg: int[] arr = null;
System.out.println(arr[0]);
四、二维数组
格式1:int[][] arr = new int[3][2];
u 定义了名称为arr的二维数组
- 二维数组中有3个一维数组
- 每一个一维数组中有2个元素
- 一维数组的名称分别为arr[0], arr[1], arr[2]
- 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78
格式2:int[][] arr = new int[3][];
- 二维数组中有3个一维数组
- 每个一维数组都是默认初始化值null
- 可以对这个三个一维数组分别进行初始化
格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
- 定义一个名称为arr的二维数组
- 二维数组中的有三个一维数组
- 每一个一维数组中具体元素也都已初始化
- 第一个一维数组 arr[0] = {3,8,2};
- 第二个一维数组 arr[1] = {2,7};
- 第三个一维数组 arr[2] = {9,0,1,6};
- 第三个一维数组的长度表示方式:arr[2].length;
五、数组的常见操作(通过函数调用来说明)
1、 获取数组中的值以及求和:遍历
可通过for循环获取
数组名.length可获取该数组的长度。
2、 求数组中的最大值(通过函数实现):排序
a) 选择排序
b) 冒泡排序
3、 查找:折半查找
(代码诠释) OperateArr
/* 数组的工具类*/class ArrTool{//获取最小值的功能public static int getMin(int[] arr){int min = 0;for (int i=1; i<arr.length-1; ++i){if (arr[i]<arr[min]){min =i;}}return arr[min];}//获取最大值的功能 public static int getMax(int[] arr){int max = 0;for (int i=1; i<arr.length; ++i){if (arr[max]<arr[i]){max = i;}}return arr[max];}//将数组进行从大到小的排列 选择排序public static int[] sortMax(int[] arr){for (int i=0;i<arr.length-1 ;++i ){for(int m=i+1;m<arr.length;++m){if (arr[i]<arr[m]){swap(arr,i,m);}}}return arr;}//将数组从小到大排列 冒泡排序public static int[] sortMin(int[]arr){for (int i=0; i<arr.length-1;++i ){for (int m=0; m<arr.length-i-1;++m){if (arr[m]>arr[m+1]){swap(arr,m,m+1);}}}return arr;}//将数组输出public static void print(String s,int[] arr){System.out.print(s+"arr = {");for (int i=0; i<arr.length; ++i){if (i != arr.length-1){System.out.print(arr[i]+" ");}if (i==arr.length-1){System.out.print(arr[i]+"}"+"\n");}}}public static void print(String s,int x){System.out.print(s+x+"\n");}//将两个数进行交换public static void swap(int[] arr,int x,int y){int temp = arr[x];arr[x] = arr[y];arr[y] = temp;}//折半查找public static int halfSearch(int[] arr,int key){int min = 0,max = arr.length-1,mid;while(min<=max){mid = (max+min)>>1;if(key>arr[mid])min = mid + 1;else if(key<arr[mid])max = mid - 1;elsereturn mid;}return -1;}}class OperateArr//主函数{public static void main(String[] args){int[] arr = {89,2,8,56,4,7,36,99,66};int x = 36;ArrTool.print("最小值是",ArrTool.getMin(arr)); //调用工具类中的获取最小值的函数,并打印ArrTool.print("最大值是",ArrTool.getMax(arr));//调用工具类中的获取最大值的函数,并打印ArrTool.print("原数组是",arr);//调用工具类中的打印函数ArrTool.print("从小到大排序是",ArrTool.sortMin(arr));//调用工具类中的从小到大排序的函数,并打印ArrTool.print("从大到小排序是",ArrTool.sortMax(arr));//调用工具类中的从大到小排序的函数,并打印ArrTool.print("在数组中与该数相匹配的元素的角标是",ArrTool.halfSearch(ArrTool.sortMin(arr),x));//调用工具类中的折半查找的函数,并打印}}/*执行结果============================================最小值是2最大值是99原数组是arr = {89 2 8 56 4 7 36 99 66}从小到大排序是arr = {2 4 7 8 36 56 66 89 99}从大到小排序是arr = {99 89 66 56 36 8 7 4 2}在数组中与该数相匹配的元素的角标是4============================================*/
- 黑马程序员 笔记(四)——函数和数组
- 黑马程序员——函数与数组 笔记第二篇
- 黑马程序员——语句、函数和数组
- 黑马程序员——语句、函数和数组
- 黑马程序员——Java函数和数组
- 黑马程序员——java基础之函数和数组
- 黑马程序员----四-语句函数数组
- 黑马程序员—C语言笔记—数组和字符串
- 黑马程序员--Java笔记03--函数和数组
- 黑马程序员——Java学习笔记(四) .
- 黑马程序员——Java基础学习笔记(四)
- 黑马程序员——JAVA学习笔记(四)
- 黑马程序员:iOS基础——个人笔记(四)
- 黑马程序员——函数、数组
- 黑马程序员——函数与数组
- 黑马程序员——函数及数组
- 黑马程序员——Java函数、数组
- 黑马程序员——函数与数组
- 基于L298N的电机驱动电路
- servlet转发页面redirect和forward
- 各种技术资料
- C++编程思想--隐藏实现
- win7与xp虚拟机如何实现文件共享
- 黑马程序员 笔记(四)——函数和数组
- JSP中pageEncoding和charset区别,中文乱码解决方案
- Fedora 16为Grub2添加修改背景图片和字体颜色
- 读取数据到结构体数组
- C语言问题练习1
- 随心随笔
- 【练习01】 简单题(1)1008
- oacle自动提交的一些疑惑
- commit 和 push 的临界点