变量与常量
1、变量
var 变量名称:类型=xxx var:variable
一般不指定类型,scala编译器会自动识别生成
var name:String ="zhangsan"
var name1="lisi"
name1="wangwu"
变量中,变量名可以重新赋值
2、常量
val 常量名称:类型=xxx val:value
val b=10
此时如果重新定义b=2,会报错
3、使用类型别名定义变量
type关键字
type 类型别名=类型
type T=String
var name:T="sam"
Scala数据结构层次
Scala与java有着相同的原始数据类型
数据类型:Byte/Shor/Int/Long/Float/Double/Char/Boolean/String
Scala中的数据类型和Java中的一样,只是首字母大写。
Any:所有类型的超类(顶级类型)
AnyVal:表示值类型的超类
AnyRef:表示引用类型的超类,对应java.lang.Object
UnIt:表示无值,类似于Java中的void
Nothing:所有类型的子类
Null:表示null或空引用,有一个示例null
字符串插值
s插值器:允许将变量引用、表达式直接插入字面字符中
val name="sam"
println(s"hello,$name")
用“$”引用我们定义的常量
除了引用常量外,我们还可以通过其进行运算
println(s"1+1=${1+1}")
f插值器:相当于是格式化输出
var num=521.1314
println(f"$name%s,$num%2.3f")
$name%s表示调用name变量;
2.3f:2是指num总共有多少位,这里num总共有8位,所以当定义为2时对整体位数没有影响。3表示的是小数点后保留3位(四舍五入)。如果2.3改成9.3,那么就超过了num的位数,会自动在前面补上一位空格符
raw插值器:输出原始数据
println("a\nb")
println(raw"a\nb")
那么我们如何实现在一条语句中,同时输出原始语句,在该使用换行符等符号时也让其起作用呢?
println(raw"a\nb"+"\nc\nd")
我们可以使用加号进行连接
Scala条件语句
if语句
Scala中的if语句用法和java基本相同
我们在idea上进行演示。定义一个main方法:
def main(args: Array[String]): Unit = {
val x=10
if(x>0) {
println("x大于10")
}else if (x == 10) {
println("x等于10")
} else{
println("x小于10")
}
}
条件语句返回值
Scala任何表达式都有返回值
例如
var x=10
var y=if(x==10) x+1 else x
条件语句的返回值赋值给y
代码块“{…}”也是表达式,返回值为最后一个表达式结果
例如
def main(args: Array[String]): Unit = {
val x=10
val y={
x+1;
println("Hello Scala")
}
println(y)
}
此时输出结果为
x+1的结果并不会输出。()表示的是y:Unit=(),因为返回值是返回最后一个表达式的结果,而println(“我是代码块”)是一个字符串,所以返回结果为unit。
Scala循环控制
While循环
var num=10
while (num<20) {
println(num)
num=num+1
}
while循环的语句同Java
当然我们也可以使用do{}while()的形式
var num = 10
do {
println(num)
num = num + 1
}while(num<20)
for循环
Scala中的for循环和Java相比还是有所区别的:
val num=10
for(i <- 1 to num) {
println(i)
}
1 to 10 表示从i的值从1取到10。
val num=10
for(i <- 1 until num) {
println(i)
}
这两个代码的区别是 取值区间不同,until表示从1取到num的前一个数。区间是左闭右开
for循环中加入步长
def main(args: Array[String]): Unit = {
val num=10
for(i <- 1 to num by 2) {
println(i)
}
}
在1到10 的范围内取值,间隔为2,即步长为2
当我们进行循环的时候,有时候并不想取尽所有的值,此时我们就需要适时的中断这一循环,就像Jva中的break。
Scala中同样提供了Break的方法。
在调用Break方法前,我们需要先导入Break方法
import scala.util.control.Breaks._
object Demon4 {
def main(args: Array[String]): Unit = {
val num=10
breakable( for(i <- 1 to num) {
if(i>6){
break
}else{
println(i)
}
})
}
}
注意,我们在调用break时候要把语句写在**breakable()**里面,否则就会包异常:
for循环过滤
var num=10
for (i <-1 to num;if i%2==0;if i>6) {
println(i)
}
循环过滤的条件之间用分号分开,满足过滤条件的值输出
for循环返回值(for推导式)
var num=10
val result=for (i <-1 to num;if i%2==0;if i>6) yield i;
for(a <- result) {
println(a)
}
for循环中的yield会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。
把result结果赋给a返回
下面我们在举一些例题来巩固下循环。
1、用循环打印出九九乘法表
def main(args: Array[String]): Unit = {
var num=9
for(i <- 1 to num) {
for(j <- 1 to i) {
print(i+"*"+j+"="+(i*j)+" ")
}
println()
}
}
2、打印直角三角形
def main(args: Array[String]): Unit = {
var num=6
for(i <- 1 to num) {
for(j <- 1 to i) {
print("*")
}
println("")
}
}
3、打印等腰三角形
def main(args: Array[String]): Unit = {
var num=6
for(i <- 1 to num) {
for(j <- 1 to num-i) {
print(" ")
}
for (k <- 1 to 2 * i - 1){
print("*")
}
println("")
}
}
4、打印镂空的等腰三角形
def main(args: Array[String]): Unit = {
var num=6
for(i <- 1 to num) {
for(j <- 1 to num-i) {
print(" ")
}
for (k <- 1 to 2 * i - 1){
if(k==1 || k==2*i-1 || i==num){
print("*")
}else{
print(" ")
}
}
println("")
}
}
Scala数组
Scala数组的索引从0开始。
数组创建方式一
首先定义数组的元素类型和大小
var arr1:Array[String]=new Array[String](3)
再往里插入值
arr1(0)="sam"
arr1(1)="sally"
arr1(2)="mary"
修改数组元素:
arr1(2)="john"
数组创建方式二
我们可以直接给定义的数组赋与元素
var arr2=Array("Jason","Marie","Jimmy")
我们可以查看下arr2的类型
arr2.getClass.getName
自动识别为String类型
数组的创建方式三
var arr3=Array.range(1,10,2)
这种创建方式利用了range范围函数,从1到10,步长为2
针对数组的用法,大家可以参考下这篇博文来进一步学习数组的应用
Scala之Array的方法