Bootstrap

JAVA代码知识点

while 与 do while 的区别

do{
  sum+=i;
  i++;
}while(i<=100)

whlie 先判断,后执行

do while 先执行,后判断

do while 程序一定会执行一次,然后再进行条件的判断

for循环语句

增强for循环

 int[] number = {10,20,30,40,50};
//遍历数组的元素---------------直接把number的值直接赋值给x,然后输出
        for (int x:number){
            System.out.println(x);
​

break与continue,goto

break 用于强行退出循环,不执行循环中剩余的语句,但程序尚未终止

continue 终止某次循环过程,跳过这一次循环,跳过循环体中尚未执行的语句,接下来直接判断下一次是否执行循环的判定,接着执行下一次循环。

goto

函数,方法

//修饰符 返回类型 方法名(参数类型 参数名)
public static void test(){
  //方法体(具体的功能)
  return 返回值;    //当无返回值时,不需要return
}

实参与形参:

实参:调用方法的实体参数

形参:用来定义方法的参数

return:

一般返回语句return放在方法体的最下面

//return除了返回结果,还有终止方法的意思

  1. 方法返回一个值,方法调用通常被当作一个值

    int larger = max(30,40);
  2. 方法返回值是void,方法调用一定是一条语句

System.out.println("Hello world!");

值传递与引用传递 (面试题)

java都是值传递

方法重载规则

  1. 方法名相同

  2. 参数列表不同

  3. 方法的返回值可以相同,可以不同

  4. 仅返回类型不同不能够成为方法的重载

命令行传参 (method Demo03)

当点击控制台下面的terminal 进入命令行

输入javac 包名.类名

或者 通过控制台进入命令行:

  1. 先通过文件位置 加cmd 进入控制台

  2. javac 类名.java //编译

  3. 要回退到src目录才能执行:cd../ //因为包里面有个package,需要回退src,需要找到包的路径才能加载

  4. java 包名.类名 + 传递的参数 //执行代码

可变参数/不定项参数(method Demo04)

  1. 指定参数类型后加一个省略号(...)

  2. 一个方法中只能指定一个可变参数,他必须是方法的最后一个参数,任何普通的参数都必须在的之前声明

递归(面试) (method Demo05)

  1. 递归头:什么时候不调用自己的方法,如果没有头,将陷入死循环。

    递归中的f(1)

  2. 递归体:什么时候需要调用自身的方法。

method 练习:写一个计算器

数组

数组四个特征:

  1. 长度确定,一旦被创建,大小不可以改变

  2. 元素必须是相同类型的,不能够混合

  3. 元素可以是任何类型的,包括基本类型和引用类型

  4. 数组本身就是对象,数组的元素相当于对象的成员变量

数组的创建:(相关new的操作都会与堆有关)

int[] nums = new int[10];      //声明与创建
int[] nums;                    //1.声明一个数组      数组并不存在
nums = new int[10];            //2.创建一个数组      数组才会产生
​
int[] a = {1,2,3,4,5,6,7,8,9};  //静态初始化

array.length 数组的长度

  1. 静态初始化

    创建+赋值

  2. 动态初始化(数组一经分配空间,其中的每个元素都会被隐式初始化)

    包含默认初始化---------int 默认初始化为0

一个错误BUG:

ArrayIndexOutOfBoundsException:数组下标越界了

数组的使用:

//反转数组------函数
public static int[] reverse(int[] arrays){
    int[] result = new int[arrays.length];
    for (int i = 0,j=arrays.length-1; i < arrays.length; i++,j--) {
        result[j] = arrays[i];
    }
    return result;
}
​
  //打印数组元素------函数
    public static void printArray(int[] arrays){
        for (int i = 0; i < arrays.length; i++) {
            System.out.print(arrays[i]+" ");
​
        }
    }   

二维数组

int[][] array = {{1,2},{3,4},{5,6}};
    printArray(array[0]);
    System.out.println(array[0][0]);
    System.out.println("-------------------------------------");
    System.out.println(array.length);                              //输出的为二维数组的外层数组
    System.out.println(array[0].length);                           //输出的为二位数字内层的数组
    System.out.println("-------------------------------------");
    for (int i = 0; i < array.length; i++) {                       //输出整个二维数组
        for (int j = 0; j < array[i].length; j++) {
            System.out.println(array[i][j]);
            System.out.println("-----------------------------");
        }
​
    }
}
​
​
    int[] a = {1,2,34,5344,123,24,52};
        System.out.println(a);  //[I@7f31245a
​
        Arrays.sort(a);                                              //数组进行排序
        System.out.println(Arrays.toString(a));
​
        Arrays.fill(a,0);                                          //数组填充(数组全都用0表示)
        System.out.println(Arrays.toString(a));
    }
​
​
​
    //重新造轮子----------------------------------------定义打印数组函数
    public static void printArray(int[] a){
        for (int i = 0; i < a.length; i++) {
            if (i==0){
                System.out.print("[");
            }
            if (i==a.length-1) {
                System.out.print(a[i] + "]");
            } else{
                System.out.print(a[i]+",");
            }
​

稀疏数组

11(棋盘总共多少行)11(棋盘总过多少列)3(总共棋盘中有三个非零的值)
031
452
151

 /*
        array1 为最基础的矩阵
        array2 为压缩的稀疏矩阵
        array3 为稀疏矩阵返回的正常矩阵
         */
​
​
​
        //1.创建一个二维数组11*11的棋盘   0:没有棋子 1:黑棋   2:白棋
        int[][] array1 = new int[11][11];
        array1[1][2] = 1;
        array1[2][3] = 2;
        //输出原始数组
        System.out.println("输出原始数组:");
​
        for (int[] ints : array1){
            for (int anInt : ints){
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
​
​
        //转换为稀疏数组保存
        //1.获取有效值的个数
        int sum = 0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (array1[i][j]!=0) {
                    sum++;
                }
            }
        }
        System.out.println("有效值的个数:"+sum);
​
        //2. 创建一个稀疏数组的数组
        int[][] array2 = new int[sum+1][3];
        array2[0][0] = 11;
        array2[0][1] = 11;
        array2[0][2] = sum;
​
        //遍历二维数组,将非零的值,存放在稀疏数组中
        int count = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j]!=0){
                    count++;
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array1[i][j];
                }
            }
        }
        //输出稀疏数组
        System.out.println("稀疏数组:");
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0]+"\t"
            +array2[i][1]+"\t"+array2[i][2]+"\t");
        }
​
​
​
        //还原稀疏数组
        //1. 读取稀疏数组
        System.out.println("---------------------------");
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
​
        //给其中的元素还原值
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }
        //打印
        System.out.println("输出还原数组:");
​
        for (int[] ints : array3){   //遍历array3
            for (int anInt : ints){
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
​
​
​

​
    //冒泡排序
    //比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们则交换他们的位置
    //每一次标胶后都会产生一个最大或者最小的数字
    //下一轮则可以少一次排序
    //依次循环,直到结束
    public static int[] sort(int[] array){
        //临时变量
        int temp = 0;
        //外层循环。判断我们要走多少次
        for (int i = 0; i < array.length-1; i++) {
            //内层循环,如果第一个数比第二个数大,则交换位置
            for (int j = 0; j < array.length-1-i; j++) {
                if (array[j + 1] > array[j]) {
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
        return array;
    }
​

内存分析

;