Scanner类

  • Scanner类获取用户的输入:next()与nextline()获取输入的字符串,hasNext()和hasNextLine()判断是否还有输入的数据。用完关闭Scanner.close()。next()以空格为结束符,nextLine()以回车为结束符。还有nextInt()和nextFloat()等方法。
  • Scanner s = new Scanner(System.in)

Java的流程控制

  • 顺序结构:一步一步往下执行。
  • 选择结构:if单选择,if双选择、if多选择、switch (byte、short、int、char,string(JDK7以后支持,必须是字符串常量,字面量))
  • 循环结构:while,do…while,for(支持迭代的一种通用结构,快捷键:100.for,for中的三个位置都可为空),增强for循环(主要用于数组和集合)。
    for(声明语句:表达式){
    //声明语句:必须与数组的数据类型相同
    //表达式:数组名或者为返回值为数组的方法
    }
  • break和continue:break强行退出循环。continue终止某次循环过程,跳过循环中尚未执行的语句,接着进行下一次是否执行循环的判定。
  • goto关键字(不建议使用),java没有,可以通过continue和break实现,label:….;continue label;

Java方法详解

  • 方法的重载:相同的函数名称相同,但参数不同(参数个数不同,参数类型不同,参数排序不同
  • 命令行传参:main函数中的args数组接收用户的输入参数。
  • 可变参数:一个方法中只能指定一个可变参数,必须是方法的最后的一个参数,其它普通参数要在它之前声明。语法格式:数据类型… 变量名。
  • 递归:递归头(递归结束)和递归体(什么时候调用自身方法)

数组

  • 数组声明:数据类型 数组名[] 或者 数据类型[] 数组名(推荐)
  • 数组创建 : 数组名 = new 数据类型[数组大小]
  • 获取数组长度:数组名.length
  • 三种初始化:
  • 静态初始化:int[] a = {3,1};
  • 动态初始化:int[] a = new int[10];
  • 默认初始化:为0
  • 数组长度一旦创建,大小不可改变
  • 数组边界:[0,length-1]
  • 多维数组:int[][] a = new int[2][5]
  • Arrays类:
  • Arrays.toString(a)—打印数组
  • Arrays.sort(a)—排序算法
  • Arrays.equals(a,b)—比较两数组是否相等
  • Arrays.binarySearch(a)—二分查找指定元素
  • Arrays.fill(a,1,2,0)—填充数组,将a[1]-a[2]数组元素变为0
  • 排除算法:
  • **冒泡排序:**两层for循环,外层表示比较次数,内层进行具体比较。如果第一个数大于第二数,则交换(从前往后比较)。(可以使用flag优化)
  • 选择排序:每次选择未排序序列的最小或者最大元素
  • 插入排序:构建有序序列,从未排序数据中选择一个元素,在已排序序列中从后向前扫描,找到相应位置并插入。
  • 快速排序:每次选择一个基准,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
  • 归并排序:分治法。即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
  • 希尔排序:通过一个增量序列,进行增量序列个数k趟排序。将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序。
  • 堆排序:根堆的性质即子结点的键值或索引总是小于(或者大于)它的父节点进行排序。
  • 基数排序::对于四位数,按照数据的千位、百位和各位分别排序。
  • **稀疏数组:**当一个数组中大部分为0或者为同一值的数组时,可以使用稀疏矩阵保存该数组。三元组存储:(row,col,value)。稀疏矩阵的第一个数为(总共的行,总共的列,不同值的个数)。