函数
定义:
函数就是定义在类中的具有特定功能的一段独立小程序,函数也称为方法。
格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...) {
执行语句;
return返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型: 是形式参数的数据类型。
形式参数: 是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数: 传递给形式参数的具体数值。
return: 用于结束函数,并且把该函数运算后的结果返回给调用者。
class FunctionDemo {
public static void main(String[] args) {
int c = add(3,4);
System.out.println("c = " + c);
}
public static int add(int a, int b){
return a + b; //返回运算结果
}
}
特点:
1、定义函数可以将功能代码进行封装。
2、便于对该功能进行复用。
3、函数只有被调用才会被执行。
4、函数的出现提高了代码的复用性。
注意:
1、对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写,或者写上return;。
2、函数中只能调用函数,不可以在函数内部定义函数。否则,编译时期就会报错。
3、定义函数时,函数的结果应该返回给调用者,交由调用者处理。
重载:
概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
class FunctionDemo{
public static void main(String[] args){
System.out.println(add(3,4));
System.out.println(add(3.0,4.0));
System.out.println(add(3,4,5));
}
//加法运算,两个整数的和
public static int add(int a, int b){
return a + b;
}
//加法运算,两个小数的和
public static double add(double a, double b){
return a + b;
}
//加法运算,三个整数的和
public static int add(int a, int b,int c){
return add(a,b) + c;
}
}
注意:
1、重载与返回值类型无关,只看参数列表。
2、java是严谨性语言,如果函数调用出现不确定性,会编译失败。
数组
概念:同一种类型数据的集合。其实,数组就是一个容器,可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
例如:int[] arr = new int[4];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
例如:int[] ar r = new i nt[]{4 ,2 ,8 ,7}; 或者int [] arr = {3,4,11,6};
数组的内存分配及特点
int[] arr = new int[4]
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,又对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
内存的划分:
1.寄存器。
2.本地方法区。
3.方法区。
4.栈内存。
5.堆内存。
栈内存:用于存储局部变量,当变量所属的作用域一旦结束,所占空间会自动释放。
堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
数组常见操作
遍历并打印数组元素
class ArrayDemo {
public static void main(String[] args){
int[] arr = new int[] {56,23,4,22};
for(int x = 0 ; x < arr.length ; x++)
System.out.println("arr["+x+"] = "+arr[x]);
}
}
获取最值(最大值,最小值)
思路:
1、需要进行比较,并定义变量记录住每次比较后较大的值。
2、对数组中的元素进行遍历取出,和变量中记录的元素进行比较。如果遍历到的元素大于变量中记录的元素,就用变量该记录住大的值。
3、遍历结果,该变量记录就是最大值。
class ArrayDemo{
public static void main(String[] args){
int[] arr = new int[] {56,23,4,22};
int max = getMax(arr); //调用函数
System.out.println("Max = "+max);
}
public static int getMax(int[] arr) {
int num = arr[0]; //定义一个变量用来存储在不断比较中变化的最大值
for(int x = 0 ; x < arr.length ; x++) { //遍历数组
if(arr[x] > num)
num = arr[x]; //记录最大值
}
return num;
}
}
对数组进行排序(选择排序,冒泡排序)
选择排序:
思路:
1、首先拿数组第一个元素依次与除其自身外的其他每个元素顺序比较,如果第一个元素大于剩下的某个元素,就互换内容。
2、经过第一轮比较之后,此时,第一个元素就是数组中最小的元素。然后再拿第二个元素与除第一个元素和其自身的元素进行比较,如果第二个元素大于剩下的某个元素
,就互换内容。此时,第二个元素就是数组中倒数第二小的元素。
3、依次类推,直到最后一个元素。
class ArraySort1{
public static void main(String[] args){
int[] arr = new int[] {56,23,4,22,13};
selectSort(arr);
printArray(arr);
}
public static void selectSort(int[] arr) {
//嵌套循环,比较大小
for(int x = 0 ; x < arr.length-1 ; x++) {
for(int y = x + 1 ; y < arr.length ; y++) {
if(arr[x] > arr[y]) {
int temp = arr[x]; //定义一个第三方变量,用来交换位置
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
//定义一个打印函数
public static void printArray(int[] arr) {
System.out.print("[");
for(int x = 0 ; x < arr.length ; x++) {
if(x != arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
}
冒泡排序
思路:
1、首先在第一轮排序中,数组从第一个元素到倒数第二个元素依次与其右边的元素进行比较,如果左边的元素大于右边的元素,那么两个元素就互换。
2、经过第一轮比较,最大的元素就已经存储到数组最右边的结点中了。
3、第二轮排序则是从第一个元素到倒数第三个元素依次与其右边的元素进行比较,如果左边的元素大于右边的元素,那么两个元素就互换。
4、依照此方式,一直到只有第一和第二个元素互相比较而结束。
public static void bubbleSort(int[] arr) {
//嵌套循环,比较大小
for(int x = 0 ; x < arr.length-1 ; x++) {
for(int y = 0; y < arr.length-1-x ; y++) {
if(arr[y] > arr[y + 1]) {
int temp = arr[y]; //定义一个第三方变量,用来交换位置
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
}
折半查找(二分查找)
思路:
1、设置三个变量记录角标:min、max、mid。min初始值为0,max为数组最大角标,mid为(max+min)/2。
2、查看mid角标的元素是否与待查找的值相等,如果相等,则直接返回角标值,程序终止执行。
3、如果待查找的值小于角标为mid的元素值,那么说明待查找的元素的位置可能在min与mid角标之间。设置max=mid-1,mid=(max+min)/2,重复第1、2步的操作。
4、如果待查找的值大于角标为mid的元素值,那么说明待查找的元素的位置可能在mid与max角标之间。设置min=mid+1,mid=(max+min)/2,重复第1、2步的操作。
5、如果数组中不存在待查找的元素,那么按照如上流程,最终min角标值会大于max角标值,此时返回-1。
public static int binarySearch(int[] arr, int key){
int max,min,mid;
min = 0;
max =arr. length - 1;
mid = (max + min)/2;
while(arr[mid] !=key){
if(key > arr[mid])
min = mid + 1;
else if (key < arr[mid])
max = mid - 1;
if(max < min)
return -1;
mid = (max + min)/2;
}
return mid;
}
二分查找只能用于,有序数组
二维数组
格式1:
int[][] arr = new int[3][2];
表示:
1、定义了名称为arr的二维数组。
2、二维数组中有3个一维数组。
3、每一个一维数组中有2个元素。
4、一维数组的名称分别为arr[0],arr[1],arr[2]。
5、给第一个一维数组第一个脚标位赋值为78写法是:arr[0][1]=78;。
6、arr存储的是二维数组的初始地址,arr[0]、arr[1]、arr[2]存储的是一维数组的初始地址。
class Test11 {
public static void main(String[] args){
int[][] arr = new int[3][2];
System.out.println(arr.length ); //打印二维数组的长度
System.out.println(arr[1].length ); //打印角标为1的一维数组长度
}
}
格式2:
int][] arr = new int[3][];
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
格式3:
int[][] ar
r
=
{{3,8,2},{2,7},{9,0,1,6}};