Java学习记录(二)

用户交互Scanner类的使用

//创建一个扫描器对象,用于接收键盘输入数据
Scanner scanner = new Scanner(System.in);

//凡是属于IO流的,我们在操作完成之后一定要将其关闭,不然会一直占用系统资源
scanner.close();

通过Scanner类的 next()nextLine() 方法获取输入的字符串,在读取前我们一般需要使用 hasNext()hasNextLine() 来判断是否还有输入的数据。

next():

  1. 一定要读取到有效字符后才可以结束输入。
  2. 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  3. 只有输入有效字符之后才将其后面输入的空白作为分隔符或者结束符。
  4. next() 不能得到带有空格的字符串。

nextLine()

  1. 以Enter为结束符,也就是说nextLine()方法返回的是输入回车键之前的所有字符。
  2. 可以获得空白。

方法

Java方法是语句的集合,它们在一起执行一个功能

  • 方法是解决一类问题的步骤的有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用

设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样有利于我们后期的拓展

递归

递归包括两个部分:

  • 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
  • 递归体:什么时候需要调用自身方法
//下面实现一个简单的递归运算,阶层 5! = 5*4*3*2*1
public static int f(int n){
    if(n == 1){
        return n;
    }else{
        return n*f(n-1);
    }
}

数组

//数组的创建
int[] array = new int[10];
//数组的赋值操作
array[0] = 1;

稀疏数组

当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。

稀疏数组的处理方式

  • 记录数组一共有几行几列,有多少个不同的值
  • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
一个11*11的二维数组:
	      0 0 0 0 0 0 0 0 0 0 0
              0 0 1 0 0 0 0 0 0 0 0
              0 0 0 0 2 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0

其稀疏数组形式为:
              11 11 2
              1  2  1
              2  4  2
第一行表示:这是一个arr[11][11],并且其中包含两个不同的值
第二行表示:第一个值在arr[1][2]的位置,并且值为1
第三行表示:第一个值在arr[2][4]的位置,并且值为2

//代码部分
    //将二维数组,转换为稀疏数组
    public static int[][] sparseArray(int[][] array){
        //循环遍历总共有多少个不同的值
        int con = 0;
        for (int[] ints : array) {
            for (int anInt : ints) {
                if(anInt != 0){
                    con ++;
                }
            }
        }
        //先给array2[0]赋值 行 列 不同值
        int[][] array2 = new int[con + 1][3];
        array2[0][0] = array.length;
        array2[0][1] = array[0].length;
        array2[0][2] = con;
        
        //遍历获取不同值的坐标,以及值
        int count = 0;
        for (int i = 0; i < array.length; i++){
            for (int j = 0; j < array[i].length; j++){
                if(array[i][j] != 0){
                    count++ ;
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array[i][j];
                }
            }
        }
        return array2;
    }

内存分析

  • 存放new的对象和数组
  • 可以被所有的线程共享,不会存放别的对象引用

  • 存放基本变量类型(会包含这个基本类型的具体数量)
  • 引用对象的变量(会存放这个引用在堆里面的具体地址)

方法区

  • 可以被所有线程共享
  • 包含了所有的class和static变量

总结

加油小伙子

posted @ 2021-01-26 21:45  我只知道睡觉  阅读(38)  评论(0)    收藏  举报