函数
1、函数的定义
函数就是定义在类中的具有特定功能的一段独立小程序。也称为方法。
函数的格式:
修饰符 返回值类型 函数名(参数类型形式参数1,参数类型形式参数2,...)
{
执行语句;
return 返回值;
}
2、函数的特点:
(1)定义函数可以将功能代码进行封装
(2)便于对该功能进行复用
(3)函数只有被调用才会被执行
(4)函数的出现提高了代码的复用性
(5)对于函数没有具体返回值的情况,返回值类型用关键 字void表示,那么该函数中的return,语句如果在最后一行可以省略不写。
特别说明:
(1)函数中只能调用函数,不可以在函数内部定义函数。
(2)定义函数时,函数的结果应该返回给调用者,交由调用者处理。
(3)两个明确:
明确返回值类型
明确函数的参数列表(参数的类型和参数的个数)
定义打印99乘法表的函数
//修饰符 返回值类型 函数名() public static void print99() { for(int i; i <=9; i++)//定义循环次数 { for(int j = 1; j <=i; j++) { System.out.println(j+"*"+i+"="+i*j+"\t"); } System.out.println(); } }
3、函数的重载:
(1)重载的概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者 参数类型不同即可,参数是有顺序的
(2)重载的特点:与返回值类型无关,只看参数列表
(3)重载的好处:方便阅读,优化了程序设计
函数重载的练习:
Void show(int a,char b,double c){}
Void show(int x,char y,double z)() //没有,因为和原函数一样
Int show(int a,double c,char b)//重载,因为参数类型不同,参数是有顺序的
Void show(int a,double c,char b)//重载,因为参数类型不同,重载和返回值类型无关
Boolean show(int c,char b)//重载了,因为参数个数不同
Double show(int x,char y,double z)//没有,这个函数不可以和给定函数同时存在一个类中
数组
1、同一种类型数据的集合,其数组就是一个容器!数组从0开始编号!
2、定义数组的格式:
(1)元素类型[] 数组名= new 元素类型[元素个数或数组长度] 如:int[] arr = new int[5]
(2)元素类型[] 数组名= new 元素类型[]{元素,元素,……}
如int[] arr = new int[]{1,2,3,7}; int[] arr = {1,2,5,8};
3.内存结构
(1)、栈内存:
用于存储局部变量,当数据使用完,所占空间会自动释放。函数是存放在栈区的
(2)、堆内存:
数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不再被使用,会在不确定的时间内被垃圾回收器回收
(3)方法区,本地方法区,寄存器
4.数组常见操作
(1)、遍历 ,获取数组中的元素通常用到遍历
(2)、获取最值
(3)、排序
1.选择排序
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
public static void selectSort(int[] arr)
{
for (int i = 0; i < arr.length-1; i++)
{
for (int j = i+1; j < arr.length; j++)
{
if(arr[j]<arr[i]){//先抽取第一个元素和后面的元素依次比较,找出最小值
int temp = arr[i];//找到最小值,交换两个元素的位置
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
2.冒泡排序
思路:1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
public static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length-1; i++) { //每次比较相邻的两个元素把较小的数和较大的数交换位置,最多比较n-1次,就可以排序完成 for (int j = 0; j < arr.length-1-i; j++) { if(arr[j]>arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } }
(4)查找
1.二分查找
假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功,
否则利用中间位置记录将表分成前、后两个子表,继续查找,直到找到满足条件的记录
//数组必须是有序的,键值为key public static int binarySearch(int[] arr,int key) { int max,min,mid; min = 0; max = arr.length-1; while(max>=min) { mid = (min+max)>>1;//从中间开始找起 if(key>arr[mid])//如果key大于中间的值,那么从右半边开始继续找 min = mid + 1; else if(key<arr[mid])//如果key小于中间的值,那么从左半边开始继续找 max = mid - 1; else return mid;//查找到该key值,返回该key值在数组中的下标 } return -1;//如果改值不存在,返回-1 }
二维数组
格式一
int[][] arr = new int[3][2];
定义了名称为arr的二维数组。二维数组中有三个一维数组每个一维数组中有两个元素。
一维数组的名称分别为arr[0],arr[1],arr[2]
格式二
int[][] arr = new int[3][];
二维数组中有三个一维数组,每个一维数组的默认初始化值是null。
可以对这三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
格式三
int[][] arr = {{1,5,8},{6,6,36,58},{74}};
int[][] arr = new int[3][2];
System.out.println(arr[0].length);//打印二维数组中第一个数组的长度
System.out.println(arr);//打印二维数组
System.out.println(arr[0]);//打印二位数组中角标为0的,一维数组
System.out.println(arr[0][1]);//打印二位数组中角标为0的,一维数组中角标为1的元素