自学java-20221205方法与数组

42 阅读1分钟

image.png 阶段性更新~~~

1. 方法的定义

语法:
访问权限修饰符[其他的修饰符 如static] 返回值类型 方法名(参数类型1 形参1 参数类型2 形参2 ......){
    // 方法体
    return 返回值;
}
格式说明:
 修饰符: 比如 public static等等;
     public: 访问权限修饰符
     static: 静态修饰符, 描述的方法可以直接被调用
 返回值类型: 就是功能结果的数据类型; 
     void: 
         1.没有返回值类型或者说不确定用void;
         2.如果返回值类型是void, 方法体内可以不写 return
 方法名: 小驼峰式
 参数: 如果有多个的话用逗号, 分开

结合上一篇java编程基础所学举例:

// 写一个方法,传入一个数值, 在控制台打印出对应行数的星星
import java.util.Scanner; // 引入工具类

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in); // 实例化
        System.out.println("请输入您想要打印星星的行数");
        int num = input.nextInt();
        printStar(num); // 静态方法的调用
    }
    public static void printStar(long line){
        for (int i=1; i<= line; i++){ // 双重循环,控制行
            for (int j=1; j<=i; j++){
                System.out.print("*");
            };
            System.out.println(); // 目的是换行
        }
    }
}
方法的重载: 
在类中可以创建多个方法,他们拥有相同的名字, 但是具有不同的参数和不同的定义, 返回值不能做为重载的条件,举例:
public void method(int a){ ...... }
public void method(char c){ ...... }

2. 数组的定义

4种方式:
    1. int[] scores = new int[3];
    2. int[] scores;
       scores = new int[3];
    3. int[] scores = new int[]{56, 78, 89};
    4. int[] scores = { 56, 67, 78 };

3. 数组的遍历

前情提要:
    1.x.length: 取到数组的长度
    2.scores[...]: ...代表下标0, 1, 2 ... 下标来获取到元素
    
遍历的2种方式:
    int[] scores = {56, 57, 58};
    // 1. for循环
    int num = scores.length;
    for(int i=0; i<num; i++){
        System.out.print(scores[i]);
    }
    // 2. foreach
    for (int x:scores){
        System.out.print(x);
    }
 
 可变参数: 方法的参数中最后一个参数若为数组形式,可使用可变参数的写法
 public static void main(int ...x){
     System.out.print("x是数组, 且他的长度是" + x.length);
 }
 
 遍历数组常会遇到的两个问题:
 1. 空指针异常(NullPointerException)
 举例: 
 int [] scores = []; // 定义一个空数组或null
 System.out.print(scores.length); // 这个时候会报错(java.lang.NullPointerException), 叫空指针异常;
 2. 数组越界异常(ArrayIndexOutOfBoundsException)
 举例: 
 int [] scores = {45, 56, 67}; // 定义一个空数组或null
 System.out.print(scores[5]); // 这个时候会报错(java.lang.ArrayIndexOutOfBoundsException), 叫下标越界异常;

image.png image.png

多维数组: 就是数组内的元素还是数组, 可以直接写成int [][] = {{},{},{}}; 二维数组又被称为矩阵; 其中如果矩阵的行数和列数如果相同的话又称为方阵

4. 数组常见算法(冒泡排序等)

  1. 冒泡排序(N个数字来排队,两两相比小的靠前;外层循环N-1,内层循环N-1-i) image.png

  2. 选择排序

每一轮挨个比完了选出最小的排在第一, 第二轮开始拿第二个数首先当成最小数来比, 每一轮完成后第一位就是最小的数;
选择排序法的有点是,数据规模越小越好, 好处是不占用额外的内存空间

image.png

  1. 插入排序(从后向前找到合适位置后插入,即数组排序,每一轮都用一个元素来排序) image.png

  2. 二分查找(折半查找,在一个顺序排列的数组里,查找一个数是否存在,存在的话获取该元素的下标)

image.png 拓展知识: >>> 1: 无符号右移1位, 相当于除2;

4. 数组常用方法

判断数组是否包含该元素,并返回对应下标(二分法查找):
    Arrays.binarySearch(int[] , int value); 
数组转字符串:
    Arrays.toString(int[]);
数组排序:
    Arrays.sort(int[] array);
复制指定的数组:
    Arrays.copyOf(int[] array, int length);//copyOf底层原理是arraycopy length指要复制x个元素的意思
    Arrays.copyOf(int[] array, int from, int to); // 复制: 从x位到y位 || 更多当截取
    System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length); // 性能高
    System.arraycopy(源对象, 源对象起始位置, 目标对象, 目标对象起始位置, 复制多长);
数组截取: 
    Arrays.copyOf(int[] array, int from, int to);
判断两个数组是否相等
    Arrays.equels(int[] array1, int[] array2);
使用指定元素填充数组:
    Arrays.fill(x);