zoukankan      html  css  js  c++  java
  • Scala快学笔记(一)

    一,基本概念:

    1,Scala是一种基于JVM的面向对象和函数式编程语言

    2,基本类型:数值类型 -》:Byte,Short,Int,Long,Float,Double和布尔类型:Boolean和字符类型:Char

    Java基本数据类型总结

    小数如何转为十进制

    精度转换造成精度损失

    question:用BigInt计算2的2017次方(BigInt(2).pow(1024)),scalaApI使用

    3,高级for :

    for(i <- "abc";j <- 1 to 3 if j==2) yield  (i+j).tochar
    /*result cde  note:第一个for结束记得用分号;,yield最后获得的结果和第一个生成器类型一致,如“cde” 和“abc”*/

    4,参数变长的函数声明:def Demo(args:Int*):Object={}   如果没有返回值的函数程为过程,形式如 def Demo(s:String){}  此时没有等号,也可以显示用Unit=来声明

    4.1,默认参数 def Demo(name:String="a",age:Int="4")={}  可以用val b= new Demo()  默认可以无须设置参数   name默认val

    4.2 ,函数,过程:过程没有返回值的函数,无需要=号,方法,相当于非静态方法,即对象方法??(不太确定),函数相当于Java中的静态方法(类方法),要加=号。

    5,懒值和方法和val区别:

      1,懒值 初始化被推迟,只有第一次调用时才会得到验证

      2,val 申明时就得到验证

      3,def 每次调用时,都需要进行一次验证

    例子:

    val  file=scala.io.Source.fromFile("/usr/one.txt")
    /*result   usrone.txt (系统找不到指定的路径。)*/
    lazy file1 =scala.io.Source.fromFile("/usr/one.txt")
    /*result 
    file: scala.io.BufferedSource = <lazy>
    */
    def file2 =scala.io.Source.fromFile("/usr/one.txt")
    /*result
    //file:scala.io.BufferedSource
    file1 
    file2
    //java.io.FileNotFoundException: usrone.txt (系统找不到指定的路径。)

    6,异常:try{}catch{}finally{}

    7,块以最后一个返回,空块返回Unit

    8,注意点x=y=4这样不合法的,特例:x:Unit,y:Int,x=y=5

    9,var t:Long=1   "String".foreach(t*=_.toLong)

    10,练习 递归求字符串的Unicode乘积之和

    def product(s:String):Long={
        if(s.length==1) s.charAt(0).toLong
        else s.take(1).charAt(0).toLong*product(s.drop(1))
    }
    
    //第10题
    def mi(x:Double,n:Int):Double={
        if (n==0) 1
        else if(n<0)
        1/mi(x,-n)
        else if(n>0 && n%2==0)
        mi(x,n/2)*mi(x,n/2)
        else
        mi(x,n-1)*x
    }

     10,sorted(true):升序,sorted(false):为降序(从上往下)

    11,多维数组:val arr=Array.ofDim[Double](3,4)

    12,课后习题:

    //交换数组相邻的元素 3.2
    def changeArr(arr:Array[Int]):Array[Int]={
        for (i <- 0 until arr.length if( i%2==0)) {
            val temp= arr(i)
            arr(i)=arr(i+1)
            arr(i+1)=temp
        }
        arr
    }
    /*异常,会出现数组越界,修改为 for (i <-0 until (arr.length-1,2)*/
    val tmp=java.util.TimeZone.getAvailableIDs()
    val tmp2=for (i <- tmp if(i.startsWith("America"))) yield { i.drop("America".length)}
    scala.util.Sorting.quickSort(tmp2)
    /*字符串的操作*、

    参考文献:

      1,课后习题答案

  • 相关阅读:
    前端面试题
    【429】关于ADT的访问权限
    【428】Dijkstra 算法
    【427】Graph 实现 以及 DFS & BFS
    【426】C 传递数组给函数
    【425】堆排序方法(二叉堆)优先队列(PQ)
    Hadoop案例(九)流量汇总案例
    Hadoop案例(八)辅助排序和二次排序案例(GroupingComparator)
    Hadoop案例(七)MapReduce中多表合并
    Hadoop案例(六)小文件处理(自定义InputFormat)
  • 原文地址:https://www.cnblogs.com/ksWorld/p/7134619.html
Copyright © 2011-2022 走看看