Scala学习(变量和数据类型流程控制)
Posted 数据攻城小狮子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala学习(变量和数据类型流程控制)相关的知识,希望对你有一定的参考价值。
文章目录
变量和数据类型
注释
package learn02
object demo01
def main(args: Array[String]): Unit =
//单行注释
/*
多行注释
*/
/**
* 文档注释
*/
变量
package learn02
object demo02
def main(args: Array[String]): Unit =
val name//错误,必须显示进行初始化操作
val name: String = "xwk" //不可变变量
name = "stefan" //错误,值不可改变
var age: Int = 21 //可变变量
age = 22
age = "abc" //错误,值可以改变,类型不可变
字符串
package learn02
object demo03
def main(args: Array[String]): Unit =
val name : String="xwk"
//字符串连接
println("hello "+name)
//传值字符串(格式化字符串)
printf("my name is %s\\n",name)
//插值字符串
println(s"my name is $name")
//多行字符串
println(
s"""
|Hello
| $name
|""".stripMargin
)
输入输出
package learn02
import java.io.File, PrintWriter
object demo04
def main(args: Array[String]): Unit =
//标准化屏幕输入
println("请输入您的年龄:")
val age:Int=scala.io.StdIn.readInt()
println("您的年龄为:"+age)
//从文件中获取输入
scala.io.Source.fromFile("./src/learn02/users.txt").foreach(
line=>
print(line)
)
scala.io.Source.fromFile("./src/learn02/users.txt").getLines()
//输出,文件写操作
val writer=new PrintWriter(new File("./src/learn02/test.txt"))
writer.write("Hello Scala")
writer.close()
Scala进行网络数据交互时,采用的是 java中的I/O类
先运行demo05_TestServer
再运行demo05_TestClient
,然后demo05_TestServer
会显示输出内容,结束掉程序即可。
package learn02
import java.io.BufferedReader, InputStreamReader
import java.net.ServerSocket, Socket
object demo05_TestServer
def main(args: Array[String]): Unit =
val server=new ServerSocket(9999)
while(true)
val socket:Socket=server.accept()
val reader=new BufferedReader(
new InputStreamReader(
socket.getInputStream,
"UTF-8"
)
)
var s:String=""
var flg=true
while(flg)
s=reader.readLine()
if(s!=null)
println(s)
else
flg=false
package learn02
import java.io.OutputStreamWriter, PrintWriter
import java.net.Socket
object demo05_TestClient
def main(args: Array[String]): Unit =
val client=new Socket("localhost",9999)
val out=new PrintWriter(
new OutputStreamWriter(
client.getOutputStream,
"UTF-8"
)
)
out.print("Hello Scala")
out.flush()
out.close()
client.close()
数据类型
从图中可以看出,Any是所有类型的超类型,也称为顶级类型,它包含两个直接子类,具体如下:
1.AnyVal:表示值类型,值类型描述的数据是一个不为空的值,而不是一个对象。它预定义了9种类型,分别是Double、Float、Long、Int、Short、Byte、Unit、Char和Boolean。其中,Unit是一种不代表任何意义的值类型,它的作用类似Java中的void。
2.AnyRef:表示引用类型。可以认为,除值类型外,所有类型都继承自AnyRef。
在Scala数据类型层级结构的底部,还有两个数据类型,分别是Nothing和Null,具体介绍如下:
1.Nothing:所有类型的子类型,也称为底部类型。它常见的用途是发出终止信号,例如抛出异常、程序退出或无限循环。
2.Null:所有引用类型的子类型,它主要用途是与其他JVM语言互操作,几乎不在Scala代码中使用。
类型转换
package learn02
object demo06
def main(args: Array[String]): Unit =
//自动类型转化(隐式转换)
val b:Byte=10
val s:Short=b
val i:Int=s
val lon:Long=i
println(lon)
//强制类型转化
/*
java语言
int a=10
byte b=(byte)a
*/
var n1:Int=10
var n2:Byte=n1.toByte
//字符串类型转化
var n3:Long=10
println("num "+n3)
n3.toString//scala是完全面向对象的语言,所有的类型都提供了toString方法,可以直接转换为字符串
println("num "+n3)//任意类型都提供了和字符串进行拼接的方法
标识符
Scala 可以使用两种形式的标志符,字符数字和符号。
字符数字使用字母或是下划线开头,后面可以接字母或是数字,符号"$"在 Scala 中也看作为字母。然而以"$"开头的标识符为保留的 Scala 编译器产生的标志符使用,应用程序应该避免使用"$"开始的标识符,以免造成冲突。
Scala 的命名规范采用和 Java 类似的 camel 命名规范,首字符小写,比如 toString。类名的首字符还是使用大写。此外也应该避免使用以下划线结尾的标志符以避免冲突。
流程控制
分支控制
package learn02
object demo07_if
def main(args: Array[String]): Unit =
var age=10
//单分支
if(age==10)
println("yes")
//双分支
age=15
if(age==10)
println("yes")
else
println("no")
//多分支
age=25
if(age<18)
println("童年")
else if(age<=30)
println("青年")
else if(age<=50)
println("中年")
else
println("老年")
循环控制
for
package learn02
object demo07_for
def main(args: Array[String]): Unit =
for (i <- Range(1, 5)) //范围集合,1-4
print(i + " ")
println()
for (i <- 1 to 5) //包含5
print(i + " ")
println()
for (i <- 1 until 5) //不包含5
print(i + " ")
println()
//循环守卫
for(i <- Range(1,5) if i !=3)
print(i+" ")
println()
//循环步长
for(i <- Range(1,5,2))
print(i+" ")
println()
for(i <- 1 to 5 by 2)
print(i+" ")
println()
//循环嵌套
for(i <- Range(1,5);j<- Range(1,4))
print("i="+i+",j="+j+" ")
println()
for(i <- Range(1,5))
for(j <- Range(1,4))
print("i="+i+",j="+j+" ")
println()
//引入变量
for(i <- Range(1,5);j=i-1)
print("j="+j+" ")
println()
//循环返回值
val result=for(i <- Range(1,5))yield
i*2
print(result)
while
package learn02
object demo07_while
def main(args: Array[String]): Unit =
var i=0
while(i<5)
print(i+" ")
i+=1
println()
var j=5
do
print(j+" ")//5
while(j<5)
循环中断
package learn02
object demo07_zd
def main(args: Array[String]): Unit =
scala.util.control.Breaks.breakable
for(i <- 1 to 5)
if(i==3)
scala.util.control.Breaks.break
print(i+" ")//1 2
以上是关于Scala学习(变量和数据类型流程控制)的主要内容,如果未能解决你的问题,请参考以下文章