//语法1 变量定义 两种方式 var(java变量)val(java常量),变量值可改变
//常量值不可变
//变量定义可声明类型,一般不需要指定类型,指定类型的方式 :int | :String | :Char | :Bety 等
//每行代码结尾的分号“;” 默认省略,return 关键字必须省略 当多行代码在一行显示的时候,有必要的情况下需要使用“;”分号把多条语句进行隔开
//salaca 中有一个unit类,相当于java中的void 当if(1>2) 1 执行时返回的值即为void
// 当需要混合类型的时候使用 :Any 相当于多种基本类型的父类型
//类型强转 a.asInstanceOf[希望类型] 列入val mm=m.asInstanceOf[int]
def main(args : Array[String]){
val s="hello"
var a="word"
a=s+a
println("--->"+a)
val m=100
val l= if(m<1)100 else 1
val o=if(m<1){ 1}else{ 3 }
println(o)
for(i <-1 to 10){
println(i)
}
//for循环 1 to 10 是指定一个类型为Range的有序数组值Rang(1,2,3,4,5,6,7,8,9,10)
// to 前后都取值(能取到最末位值) until 前闭后开 (不取到最后的值)
val str="hello123"
for(s<- str)println(s)
//遍历字符串的每个字符
//取字符串的指定下标字符
val ss =str.charAt(1)
//数组定义
val arr= Array(1,2,3,4,5,6,7,8,9,10)
//数组下标取值 arr(index) 数组长度 arr.length
arr(1)
arr.length
arr.last
//遍历数组
for(s <- arr)println(s)
//双重for循环 i 对应的循环为外层循环 j的循环为内层循环
for(i<- 1 to 10;j<- 1 to 100)println(i*j)
//双重循环+条件过滤
for(i<- 1 to 10;j<- 1 to 100 if i !=j )println(i*j)
//将原数组数据进行处理生成新的数组
//使用yeild生成一个新的同等长度的数组或者集合(生成对象类型取决于遍历的对象类型)并将原数组的值全部放大10倍
for(i<- arr)yield i*10
//wheil(){}循环与 do{}wheil(){}循环
//函数式编程解决方式
//scala中方法与函数有区别
//map() 操作方法 _ * 10 方法 (_ * 10)等同于(i=>i*10)(匿名函数没有函数名,只有函数逻辑) 【逻辑:将函数遍历的过程中的值付给i,然后给i * 10 放入新的集合或数组】
arr.map(_*10)
//scala与java的基础运算符是一样的 加:‘+’ 减: ‘-’ 乘: ‘*’ 除: ‘/’ 磨: ‘%’ 等于 '=' ,但是scala中运算符重载成方法
//例如 1+2 = 1.+(2)
//过滤arr数组 取当遍历的元素值磨2等于0的元素值(偶数),再对结果数组进行map()操作,操作方法_ * 10
arr.filter(i=> i%2==0).map(_*10)
//scala 中的变长数组与定长数组的不同生命方式与互相转换
//定长数组
val arry= Array[Int](10)
//变长数组
var arry1=ArrayBuffer[Int]()
//互相转换
arry.toBuffer
arry1.toArray
//数组翻转
arry.reverse
//无返回值的方法定义为: def 方法名(参数列表):Unit={代码块} 或者省略 :Unit= 再或者省略 :Unit
def ms(x:Int,y:Int):Unit={x+y}
//有返回值类型的方法定义格式:def 方法名(参数列表):Int={代码块} 一般情况返回值类型也不用指定
//当自定义方法与系统方法重名或冲突时,scala会给定义的方法其别名,调用时使用别名调用,否则会调用到系统的方法
//scala提供类型自动推断,不必要的情况可以不用指定返回值类型,注:【递归方法必须指定返回值类型】
//scala函数定义 函数标志 => def method 方法定义 function 函数
//在函数中 => 的前面为函数参数列表 后部分为函数体
( x :Int , y :Int ) => x+y //没指定函数名,匿名函数
//调用asf(1,100) 返回值101 调用方式与方法调用相同,不同之处在于 函数可以作为参数传入方法
val asf= ( x :Int , y :Int ) => x+y //指定函数名为 asf 简写
val asf2 :( Int ,Int ) => Int ={(x,y)=>x+y}//完整的函数定义 指定返回值类型
/**
* val asf2 定义函数名
* :(Int,Int) =>Int 指定函数列表与函数运算返回结果类型 Int
* ={(x,y)=>x+y} 指定函数返回值等于参数列表(x,y)赋值给x+y的运算表达式中
*/
//scala的基本数据类型转换 Int.toDouble 调用无参方法时可以不加大括号直接使用 .方法名 即可
//使用接口声明函数方式 Function系列接口 是根据函数传入参数列表相关的
//使用接口定义函数时 new Function[]传入的参数列表中的最后一位是指定返回值的类型,如下函数中Double
var a=new Function2[Int,Int ,Double] {
override def apply(v1: Int, v2: Int): Double =
{
(v1+v2).toDouble
}
}
//无返回值类型函数定义返回值类型必须声明位Unit
var a1=new Function2[Int,Int,Unit] {
override def apply(v1: Int, v2: Int):Unit=
{
println(v1+v2)
}
}
}