zoukankan      html  css  js  c++  java
  • scala-02-基本数据类型-string-分支循环

    一, 基本数据类型

    1, scala的数据类型和java类似, 不同的是scala中所有的类型都是引用类型的

    Byte
    Short
    Int
    Long
    Char
    Float
    Double
    String
    Boolean
    Unit  相当于 void, 用作不反回任何结果的
    ANY  相当于java object

    2, string 处理, 字符串定义

    一般使用双引号进行定义,    val str = "abc"

    如果想保持原样输出, 可以使用 ''' 进行定义

    val longStr = ''' type: abc
                             method: get'''

    字符串的格式化输出

    // 字符插入器
    println(s“$DATE is very nice”)  // 使用 s“”,
    println(s"${student.name}")    // 可以传入任意表达式
    println(s" ${1 + 1}")        // 任意表达式

    // 字符串插入
    println(f"$name%s is good boy")  // 使用 f“%name%s”
    printf("%s is good boy", name")  // 使用 printf(“%s”, name)
    printf("%4.2f. ", price)      // 小数点后保留 2位

    3, 变量定义

    val: 用于定义常量, 定义后的值不可改变, 必须给初始值

    val name : String = “abc”

    可以不写变量类型 , 使用自动推断

    定义 Unit, 相当于void

    val s: Unit = ()

    var: 用于定义变量

    var num: Int = ‘a’

    发生了隐式转换

    二, 运算符操作

    3, 运算符操作

    scala中所有的运算符都以方法的形式被调用, 所有的运算符都可以被重载

    var count = a + b
    在scala中会被转换成 var count = (a).+(b)    的形式

    4, 对象比较

    scala中的比较是基于内存比价的, 而java中是基于引用进行比较的

    三, 结构控制

    1),  if

    可以返回值, 条件表达式的值返回给变量

    val result = if (a > b) 1 else 0
    val result = if (a > b) 1 else if (i ==8) i else 0

    如果没有任何值返回, 会默认返回 (), 也就是 Unit (AnyVal)

    2, while循环

    def gcdLoop(x: Long, y: Long): Long = {
        var a = x
        var b = y
        while( a != 0) {
            val temp = a
            a = a * b
            b = temp
        }
        b
    }

    3, do..while 循环

    var line = ""
    do {
        line = readLine()
        println(line)
    } while (line != "")

    4, 使用if, 代替while循环

    减少var变量的定义, 同时程序表达能力更强

    def gcdLoop(x: Long, y: Long): Long = if (x = 0) x else gcdLoop(y, x * y)

    5, for循环使用

    先认识下生成器: <-  

    for (file <- fileSet) println(file)
    // 遍历出来的元素

    fileSet的值会依次赋值给file, 然后打印出来

    for (i <- 1 to 5) 
        println( arr(i) )

    for (i <- 1 until 6)
      println( arr(i) )

    "to" 会包含1-5的值, “until” 不包含 5,

    嵌套for循环

     def for_for = {
        for (i <- 1 to 9; j <- 1 to 9) {
          if (j == 9) println(i * j)
          else print(i * j + " ")
        }
      }

    for循环中可以使用if进行判断

    for (file <- fileSet if file.getName.endsWith(".scala") {
        println(file)
    }

    多重嵌套循环

    def grep(pattern: String) =
          for (
            file <- filesHere
            if file.getName.endsWith(".scala");
            line <- fileLines(file)
            if line.trim.matches(pattern)
          ) println(file +": "+ line.trim)
        grep(".*gcd.*")
  • 相关阅读:
    SVO深度解析(三)之深度滤波(建图部分)
    SVO深度解析(二)之跟踪部分
    SVO深度解析(一)之简介和评价
    图像三维重建方法综述
    SLAM优化位姿时,误差函数的雅可比矩阵的推导。
    Canny边缘检测原理与C++实现(2)实现部分
    Canny边缘检测原理与C++实现(1)原理部分
    指针的大小是谁决定的
    Ubuntu 16.04配置CUDA 9.0+cudnn 7.0以及解决Nvidia显卡导致黑屏问题
    安装FAB-Map 2.0,Ubtuntu 16.04
  • 原文地址:https://www.cnblogs.com/wenbronk/p/9025449.html
Copyright © 2011-2022 走看看