Java核心技术卷1——第三章(下)

  • 简单程序
  • 注释
  • 数据类型
  • 变量
  • 运算符
  • 字符串
  • 输入输出
    • 读取输入
      • 打印输出到标准输出流(控制台窗口)
        • System.out.println();
      • 读取标准输入流
        • System.in
          1. 构造Scanner对象
          2. 关联System.in
            • Scanner in = new Scanner(System.in);
          3. 使用Scanner类实现输入操作
          4. 调用java.util.*包
        • Scanner类方法
          • in.nextLine();//读取一行
          • in.next();//读取一个单词,空白符为分隔
          • in.nextInt();//读取整数
          • in.nextDouble();//读取浮点数
          • in.hasNext();//检测输入中是否还有其他单词
          • in.hasNextInt();//检测是否还有整数的下一个字符序列
          • in.hasNextDouble();//检测是否还有浮点数的下一个字符序列
          • 输入可见,不适合输入密码
        • Console类
          • 实现读取密码
          • Console cons = System.console();//通过控制台窗口为交互的用户返回一个Console对象
          • String username = cons.readLine("User name");
          • char[] passwd = cons.readPassword("Password");//密码存在一维字符数组中
    • 格式化输出
      • 宽度x
      • 精度.x
      • %格式说明符
      • 格式控制标志
      • 日期和时间的格式化
        • 以t开始,以表中字母结尾
      • 看不懂。。。
        • %1$(对第一个参数格式化,参数索引)
    • 文件输入输出
      • 读取文件
        • 用File对象构造Scanner对象
          • Scanner in = new Scanner(new File(filename));//文件名有\要再加个\,即c:\\myfolder\\filename
      • 写入文件
        • 构造PrintWriter对象
          • PrintWriter out = new PrintWriter(filename);
      • filename文件找不到,异常
        • throws FileNotFoundException
  • 控制流程
    • 块作用域
      • {}
      • 若干条java语句
      • 确定变量作用域
      • 可嵌套
        • 不可声明同名变量
        • C++可以
    • 条件语句
      • if(条件){状态1;}
      • else {状态2;}
      • else与最临近的if构成一组
      • if...else if...
    • 循环语句 
      • while(条件){}
      • do{}while(条件);
      • for(int i=0;i<n;i++){}//确定循环
    • 多重选择
      • switch语句
      • switch(value){
        • case value1:...break;//value必须是整数或枚举常量
        • case value2:...break;
        • default:...break;
      • }
      • 枚举常量不必在每个标签中指明枚举名,可由switch表达式值确定
    • 没有goto
      • 带标签的break实现跳转
      • 标签在希望跳出的最外层循环之前,后加冒号:
        • flag:
        • while(xxx){
          • while(xxx){}
        • }
      • 对于任何使用break语句的代码,需要检测循环是正常结束还是由break跳出
      • 标签可放到任何语句,使用break跳转
      • continue语句
        • 也可中断控制流程
        • 将控制转到最内层循环的首部(while开始,for更新处)
        • 带标签的continue
          • 跳到与标签匹配的循环首部
  • 大数值
    • 基本整数和浮点精度不够满足需求
    • java.math包的BigInteger和BigDecimal
      • BigInteger a = BigInteger.valueOf(100);
      • 没有+-*/%
        • BigInteger c = a.add(b);//c = a+b
        • BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));//d= c*(b+2)
        • d =a.subtract(b);//a-b
        • d =a.mod(b);//a%b
        • d =a.divide(b);//a/b
        • int i = a.compareTo(b);//a=b——>0,a<b——>负数,a>b——>正数
        • BigDecimal divide(BigDecimal other,BigDecimal mode)//商
        • static BigDecimal valueOf(long x,int scale)//返回x/10^scale的大实数
  • 数组
    • 一种数据结构
    • 存储同一类型值的集合
    • 整型下标访问
    • 声明时需指明数组类型和数组变量的名字
      • int[] a;
      • int a[];
    • 声明并未初始化
    • new创建数组
      • int[] a = new int[100];
    • 数组长度
      • a.length
      • 可为0
      • new int[0]//不是null
    • 长度不可变
      • 创建数组列表可改变
    • foreach循环
      • for(int i:a){}
      • i暂存a里每个元素
      • a为collect集合
        • 数组
        • 实现Iterable接口(ArrayList)
      • 遍历所有
        • 不需要遍历所有,使用传统循环
        • 或循环内部使用下标值
      • 打印数组所有值
        • Array类的toString方法
          • Arrays.toString(a);//返回一个包含数组元素的字符串[1,2,3,4]
    • 初始化
      • int a={1,2,3}//不用new
      • 匿名数组new int[]{1,2,3}
    • 数组拷贝
      • 引用同一数组
        • int[] a = b;
        • a[5] = 3;
        • 会导致修改a的时候b也一起修改
      • 需要拷贝到新的数组
        • Arrays的copyOf方法
          • int[] a = Arrays.copyOf(b,b.length);
          • 第二个参数表示新数组大小
          • 可用来增加数组大小
          • 多余元素赋值
            • 数值型——0
            • 布尔型——false
        • System.arraycopy(from,fromIndex,to,toIndex,count);
          • 从from数组的fromIndex位置拷贝count个元素到to数组的toIndex位置
        • 与分配在堆上的数组指针一样
          • 相当于int* a = new int[100]
          • java的[]预定义为检查数组边界,而且没有指针运算
          • 不能通过a+1获取数组下一元素
    • 命令行参数
      • main函数的String args[]参数
        • 字符串数组,即命令行参数
        • java xxx -g cruel world
          • args[0]:"-g";
          • args[1]:"cruel"
          • args[2]:"world"
          • 函数中可调用args[]进行操作
    • 数组排序
      • 数值型
        • Arrays.sort(a);//优化的快速排序算法
        • 抽取实验(取出不放回)
        • static String toString(type[] a)
          • 返回 字符串 [1,2,3]形式
          • type为int、long、short、char、byte、boolean、float、double类型的数组
        • static type copyOf(type[] a,int length)
        • static type copyOf(type[] a,int start,int end)
          • 返回与a类型相同的数组,长度为length,或者end-start,数组元素为a的值
          • 包含start下标的值,不包含end下标的值
          • end可能大于a.length,其结果为0或false
          • length可能大于a.length,其结果为0或false
        • static void sort(type[] a)
        • static int binarySearch(type[] a,type v)
        • static int binarySearch(type[] a,int start,int end,type v)
          • 二分搜索法查找值v
          • 成功——>下标值
          • 失败——>负数值r
          • -r-1是为了保持a有序v应插入的位置
        • static void fill(type[],type v)
          • 将数组的所有数据元素值设为v
        • static boolean equals(type[] a,type[] b)
          • 数组大小相同,对应下标元素相等——>true
        • static void arraycopy(Object from,int fromIndex,Object to,int toIndex,int count)
          • 将第一个数组中的元素拷贝到第二个数组中
    • 多维数组
      • 多个下标访问数组元素
      • 适合于表格或更加复杂的排列形式
      • 声明
        • double[][] balances;
      • 初始化
        • balances = new double[NYEARS][NYEARS]
        • int[][] balances={{1,2,3},{4,5,6},{7,8,9}}
        • 赋值应该和声明一起
      • 打印
        • Arrays.deepToString(a);
        • [[1,2,3],[4,5,6],[7,8,9]]
    • 不规则数组
      • 实际不存在多维数组,只有一维数组
      • 多维数组:
        • 数组的数组
      • 声明
        • int[][] adds = new int[ NMAX + 1 ][];
      • 分配行
        • for(int n = 0;n<=NMAX;n++)
          • adds[n] = new int[n + 1];
      • 没超出边界,就可访问元素
        • for(int n = 0;n<adds.length;n++){
          • for(int k = 0;k<adds[n].length;k++){
            • adds[n][k] = num;
          • }
        • }
      • 相当于创建了一个包含10个指针的一个数组
        • double** balances = new double*[10];
        • 每个元素分配一个包含6个数值的数组
          • for(i = 0;i<10;i++){
            • balances[i] = new double[6];
          • }
      • 只能单独创建行数组
 
posted @ 2018-10-09 15:53  Giles_Gu  阅读(254)  评论(0)    收藏  举报