05.函数和数组

Posted W-forever

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了05.函数和数组相关的知识,希望对你有一定的参考价值。

函数

函数定义的格式:
    修饰符 返回值的类型 函数名(形参列表){
    	需要封装的功能代码;
	}
修饰符:public static
返回值类型:函数执行完毕后,返回的结果的数据类型
函数名:函数名(),要符合变量名的命名规范
注意:有些函数是没有结果返回给调用者的,那么这个时候的返回值的类型是void
class demn{
    public static void main(String[] args){
        int num = add(2, 3);
        System.out.println("结果:" + sum);
    }
    //做加法功能的函数
    public static int add(int a, int b){
            int a = 2;
            int b = 3;
            return a + b;
        }
    public static void add(int a, int b){
        int sum = a + b;
        System.out.println(sum);
    }
    public static int max(int a, int b){
        int max = 0;
        if(a > b){
            max = a;
        }else{
            max = b;
        }
        return max;
    }
    //定义一个函数返回分数的等级
    public static String getgrade(int score){
        String grade = "";
        if(score >= 90 && score <= 100){
            grade = "A";
        }else if(score >= 80 && score <= 90){
            grade = "B";
        }else{
            grade = "C";
        }
        return grade;
    }
}

return关键字,函数的重载

class demn{
    public static void main(String[] args){
        
    }
    public static void add(int a, int b){
        System.out.println("总和" + (a + b));
        return;
    }
}
return关键字的作用:
    1.返回数据给函数的调用者
    2.函数一旦执行到return关键字,那么该函数结束
    3.一个函数是void类型,那么也可以出现return关键字,但是return关键字后面不可以有任何数
函数的重载:在一个类中出现了两个或两个以上的同名函数,这个称为函数的重载
函数重载的作用:同一个函数名可以出现不同的函数,以应对不同个数或者不同数据类型的参数
函数重载的要求:
    1.函数名一致
    2.形参列表不一致(形式参数或者对应的数据类型不一致)
public static void add(int a, int b){
    System.out.println("两个参数的总和" + (a + b));
}
public static void add(int a, int b, int c){
    System.out.println("两个参数的总和" + (a + b + c));
}
public static void add(int a, int b, int c, int d){
    System.out.println("两个参数的总和" + (a + b + c + d));
}

数组

数组是同一种数据类型的容器

数组的定义格式:

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

class demn{
    int a = 10;
    public static void main(String[] args){
        //定义一个数组
        int[] arr = new int[50];
        arr[0] = 20;
        arr[1] = 30;
        arr[2] = 40;
        arr[4] = 50;
        System.out.println("hello world");
        //等号将数组对象的内存地址赋予给arr变量
        //查看数组中的所有数据
        for(int index = 0; index < arr.length; index ++){
            System.out.println(arr[index]);
        }
    }
}
  • 栈内存的特点:

    栈内存存放的都是局部变量,变量一旦出了自己的作用域,那么马上会重内存中消失,释放内存空间

  • 堆内存的特点:

    堆内存存储的都是对象数据(除了八中基本数据类型之外的数据),对象一旦被使用完,并不会马上从内存中消失,而是等待垃圾回收器,不定时把垃圾回收,这时候该对象消失,释放资源(凡是以new关键字创建的对象,jvm都会在堆内存中开辟一个新的空间,创建一个新的对象)

  • 局部变量:

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

  • 成员变量:

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

数组常见问题,数组的初始化方式

class demn{
    public static void main(){
        //动态初始化
        int[] arr = new int[2];
        arr = null;//让该变量不要引用任何的对象,不要记录任何的内存地址
        arr[1] = 10;
        System.out.println(arr[1]);//报错,NullPointerException
    }
}
数组中最常见的问题:
    1.NullPointerException,空指针异常
    	原因:引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法
    2.索引值越界
数组初始化的方式:
    动态初始化:
    	数据类型 变量名 = new 数据类型[长度];
    静态初始化:
    	数据类型[] 变量名 = {元素1, 元素2, ……};
找一个数组中的最大值
class demn{
    public static void main(String[] args){
        int[] arr = new int[50];
        int max = getmax(arr);
        System.out.println(max);
    }
    public static int getmax(int[] arr)
    {
        int max = arr[0];
        for(int i = 1; i < getmax.length; i++){
            if(arr[i] > max){
                max = arr[i];
            }
        }
        return max;
    }
}
排序算法
选择排序
public static void selectsort(int[] arr){
    for(int j = 0; j < 4; j++){
        for(int i = j; i < 4; i++){
            if(arr[j] > arr[i]){
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}
冒泡排序
public static void selectsort(int[] arr){
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3 - i; j ++){
            if(arr[j] > arr[j + 1]){
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
二分查找法
class demn{
    public static void main(String[] args){
        int[] arr = {12, 15, 19, 24, 53};//有序的数组才可以进行二分法查找
        searchelement(arr, 34);
        
    }
    public static void searchelement(int[] arr, int target){
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == target){
                return i;
            }
        }
        return -1;
    }
    public static void selectelement(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;
            }
            mid = (min + max) / 2;
            if(max < min){
                return -1;
            }
        }
    }
}

arrays数组工具的使用

数组工具类
import java.util.*;
class helloworld{
    public static void main(String[] args){
        int[] arr = {12, 3, 45, 5 ,23};
        Arrays.sort(arr);
        String info = Arrays.toString(arr);
        System.out.println(info);
        
        int index = Arrays.binarySearch(arr, 10);//如果能找到就返回该书的下标值,如果不能找到,就返回一个负数表示(
        System.out.println(index);
    }
}

二维数组

二维数组的定义格式:
    数据类型[][] 变量名 = new 数据类型[长度1][长度1];  
二维数组的初始化方法:
    动态初始化:
    	数据类型[][] 变量名 = new 数据类型[长度1][长度1]; 
    静态初始化:
        数据类型[][] 变量名 = {{元素1,元素2}, {……}, {……}};
数组的特点:
    1.数组是智能存储同一种数据类型的数据
    2.数组是会给存储到数组的元素分配一个索引值,索引值从零开始,最大的索引知识length-1
    3.数组一旦初始化,长度固定
    4.数组和数组之间的元素和元素之间的内存地址是连续
class demn{
    public static void main(String[] args){
        int[][] arr = new int[3][4];
        arr[1][1] = 100;
        System.out.println("二维数组的长度" + arr.length);//3
        System.put.println(arr[1].length);
        
        int[][] arr = {{1, 2, 4, 5}, {34, 55}, {354, 453}};
        System.out.println(arr[2].length);
        System.out.println(arr[1].length);
        
        for(int i = 0; i < arr.length; i ++)
        {
            System.out.println(arr[i]);//输出的是三个内存地址
        }
        
        for(int i = 0; i < arr.length; i++){
            for(int j = 0; j < arr[i].length; j ++){
                System.out.println(arr[i][j]);
            }
            System.out.println();
        }
    }
}

以上是关于05.函数和数组的主要内容,如果未能解决你的问题,请参考以下文章

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

如何从片段内的列表视图打开链接网址?

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

几个关于js数组方法reduce的经典片段

js简洁代码片段