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.*")