Scala学习一(03),常量变量,快表达式,条件表达式,循环表达式,方法,函数...

变量

1.声明变量

package com.mc

object Variable {
  def main(args: Array[String]): Unit = {
    //使用val定义的变量值是不变的,相当于java中用final修饰的变量
    val i= 1
    //使用var定义的变量是可变的,scala建议用val
    var s="hello"
    //scala编译器会自动推断变量的类型,也可以自行指定
    //变量名在前,类型在后
    var str:String = "you are my sunshine!"

    println(i)
    println(s)
    println(str)
  }
}

在这里插入图片描述

常用类型

VarAndVal常量和变量演示01

package com.mc.sample02_varval

/**
  * Description:VarAndValDemo<br/>
  * Copyright(c):Minchen<br/>
  * This program is protected by copyright laws.<br/>
  * Date:  2019/8/17  星期六 09:28
  *
  * @author:Minchen
  * @Email:751914788 @qq.com
  * @version 1.0 
  */
object VarAndValDemo {
  def main(args: Array[String]):Unit={
    //①变量
    //变量age的类型由值来决定,内部编译时,会进行类型的自动推断。一旦确定后,其类型不能变化了
    var age=12
    age +=1
    //scala中没有i++,i--等,只有+=1等
    //scala一行表示一条语句,可以不用分号隔开,更简洁
    var height:Double = 111.11
    println(s"年龄是:$age,身高是:${height}")
    //要在打印前加s,这个是语法要求,打印的值变量前要加$符号,$符后面可以加{},针对于特殊的变量或者是表达式,需要使用${表达式}
    println("**********************")
    //②常量
    var PI=3.14
    //PI=Math.PI
    //lazy修饰的常量,只有当我们用到这个变量的时候,才会给它分配内存空间
    lazy val PI2=Math.PI
    println(s"PI=$PI\tPI2=$PI2")
    //lazy不能修饰变量,否则会报错
  }
}

在这里插入图片描述

常量和变量演示VarAndValDemo2

package com.mc.sample02_varval


/**
  * Description:变量和常量演示2<br/>
  * Copyright(c):Minchen<br/>
  * This program is protected by copyright laws.<br/>
  * Date:  2019/8/17  星期六 09:31
  *
  * @author:Minchen
  * @Email:751914788 @qq.com
  * @version 1.0 
  */
object VarAndValDemo2 {
  def main(args: Array[String]): Unit = {
    //
    var bInstance = new B(3)
    //下述代码:编译报错:提示:给常量重新分配了值
    // var bInstance=new B(4)

    //报错,类型B中的类型是常量,不能重复定义,
    // bInstance.num=new A(8)

    //给变量再赋值
    bInstance.num.num = 5
    //打印的是变量的位置,hash值
    println(bInstance.num)
    //打印的是变量的值
    println(bInstance.num.num)
  }
}

class A(n: Int) {
  //类A的的主构造器,直接在声明类的时候定义的构造器
  //构造器最大的用处就是在创建对象时执行初始化
  //类A的主构造器,Scala中的构造器相较于Java比较特殊,分为两种:主构造器,从构造器。主构造器是和类中字段和方法的定义混合在一起的
  //在Scala中,不需要像Java一样需要在类中定义一个与类名相同的方法来当作构造器
  //除了主构造器外,Scala中还有从构造器,用于使用和主构造器不同的参数来初始化对象。

  var num = n
}

class B(n: Int) {
  //类B的的主构造器
  //val常量
  val num = new A(n)
}

运行效果

在这里插入图片描述

scala中特殊的方法名(就是java操作符)演示

package com.mc.sample03_SpecialOperateCharDemo

/**
  * Description:VarAndValDemo<br/>
  * Copyright(c):Minchen<br/>
  * This program is protected by copyright laws.<br/>
  * Date:  2019/8/17  星期六 09:28
  *
  * @author:Minchen
  * @Email:751914788 @qq.com
  * @version 1.0
  */
object SpecialOperateCharDemo {
  def main(args: Array[String]):Unit={
    val x=3
    val y =4
    val result1=x+y
    println(s"result1=$result1")
    //scala中,实例.方法名(实参)可以舒血薇 实例 方法名 实参
    // → 语法现象称之为:语法糖,grammar sugar
    //+是一个方法,调用它能实现相加
    val result2=x.+(y)
    println(s"result2=$result2")
    var m=3
    m-=1
    println(m)
    m.-(1)
    println(m)
  }
}

运行效果

在这里插入图片描述

块表达式演示

package com.mc.sample04_BlockClauseDemo
/**
  * Description:块表达式演示<br/>
  * Copyright(c):Minchen<br/>
  * This program is protected by copyright laws.<br/>
  * Date:  2019/8/17  星期六 09:28
  *
  * @author:Minchen
  * @Email:751914788 @qq.com
  * @version 1.0
  */

object BlockClauseDemo {
  def main(args: Array[String]): Unit={
    //  pointA
    val x1=3
    val y1=4

    //pointB
    val x2=5
    val y2=6
    //使用块表达式求平面上任意两点之间的距离
    //最后一个是快表达式的返回值,必要指定是哪个值,否则返回的是()
    //运用到数学运算,首先就是要想到数学工具类Math
    var distance={
      val x=x1-x2
      val y=y1-y2
      val tmp=Math.sqrt(Math.pow(x,2)+Math.pow(y,2))
      tmp
    }

    println(s"平面上任意两点($x1,$y1),($x2,$y2)之间的举例是:$distance")
  }
}

运行效果

在这里插入图片描述

Scala条件表达式演示

package com.mc.sample04_BlockClauseDemo

/**
  * Description:条件表达式演示<br/>
  * Copyright(c):Minchen<br/>
  * This program is protected by copyright laws.<br/>
  * Date:  2019/8/17  星期六 09:28
  *
  * @author:Minchen
  * @Email:751914788 @qq.com
  * @version 1.0
  */
object ConditionClauseDemo {
  def main(args:Array[String]): Unit={
    //Any表示包括所有的类型,相当于java的Obeject,(下面例子不满足if条件会返回boolean类型的false),加了else,后面会返回else内的值
    val num=4
    val result:Any=if(num>4) "是的!大于4" else false
    println(s"result=$result")
    println("\n____________________________________\n")
    //Any表示包括所有的类型,没有加else,后面会返回()
    val result2 = if (num > 4) "是的!大于4"
    println(result2)
    println("\n____________________________________\n")

    var result3:Any=if(num>4) "是的!大于4" else{
      println("else中可是语句块")
      val n=4
      //语句最后一行表示的是返回值
      false
    }
    println(s"result3=$result3")

  }
}

运行效果

在这里插入图片描述

scala中的循环语句演示

package com.mc.sample05_CircleDemo
/**
  * Description:循环表达式演示<br/>
  * Copyright(c):Minchen<br/>
  * This program is protected by copyright laws.<br/>
  * Date:  2019/8/17  星期六 09:28
  *
  * @author:Minchen
  * @Email:751914788 @qq.com
  * @version 1.0
  */

object CircleDemo {
  def main(args: Array[String]): Unit = {
    //需求:计算1+..+10的和
    var sum = 0
    for (i <- 1 to 10) {
      sum += i
      //+=不能用空格隔开,因为它看做是一个运算符
    }
    println(s"1+..+10的和是:$sum")

    println("\n______________________________________________\n")

    //while循环
    sum = 0
    var i = 1
    while (i <= 10) {
      sum += i
      i += 1
    }
    println(s"while循环,实现1+..+10的和是:$sum")

    println("\n______________________________________________\n")
    //do while
    var sum1 = 0
    var x = 1
    do {
      sum1 += x
     x += 1
    } while (x <= 10);

    println(s"do...while...循环,实现1+..+10的和是:$sum1")

  }


}

运行效果

在这里插入图片描述

方法演示MethodDemo01

package com.mc.sample06_MethodDemo

/**
  * Description:方法演示<br/>
  * Copyright(c):Minchen<br/>
  * This program is protected by copyright laws.<br/>
  * Date:  2019/8/17  星期六 10:17
  *
  * @author:Minchen
  * @Email:751914788 @qq.com
  * @version 1.0 
  */
object MethodDemo01 {
  def main(args: Array[String]): Unit = {

    /**
      定义方法
      def 方法名(参数1:类型.参数2:类型):返回值={
      方法体}

      * 方式1:明示方法的返回值类型
      * 定义方法之求两个数的和
      */
    def add(x: Int, y: Int): Int = x + y

    /**
      * 方式2:方法的返回值类型自动推断
      * 定义方法之求两个数的和
      */
    def add2(x: Int, y: Int) = x + y


    /**
      * 方式3:方法没有返回值
      *
      * 定义方法之求两个数的和
      */
    def add3(x: Int, y: Int) {
      x + y
    }



    println( add(2,3))
    println( add2(2,3))
    println( add3(2,3))

  }

}

运行效果

在这里插入图片描述

方法演示MethodDemo02

package com.mc.sample06_MethodDemo

/**
  * Description:方法演示2<br/>
  * Copyright(c):Minchen<br/>
  * This program is protected by copyright laws.<br/>
  * Date:  2019/8/17  星期六 10:20
  *
  * @author:Minchen
  * @Email:751914788 @qq.com
  * @version 1.0 
  */
object MethodDemo02 extends App {

  /**
    * 多参数列表的方法  def 方法名(参数列表1)(参数列表2)(参数列表...):返回类型={方法体}
    *
    * @param x
    * @param y
    * @param z
    * @return
    */
  def multiParam(x: Int, y: Int)(z: Long)(m: Float) = (x + y) * z + m

  println(multiParam(1, 2)(3)(4))


  /**
    * 获得环境变量的值 调用方法,不需要传参数时候,可以省略((
    * 这个用来测试不加()
    *
    * @return
    */
  def getUserName = System.getenv("JAVA_HOME")

  println(getUserName)


  /**
    * 获得环境变量的值
    * 这个用来测试架()
    *
    * @return
    */
  def getUserName2() = System.getenv("JAVA_HOME")

  println(getUserName2())
}

运行效果

在这里插入图片描述

方法演示MethodDemo03

package com.mc.sample06_MethodDemo

/**
  * Description:方法演示3<br/>
  * Copyright(c):Minchen<br/>
  * This program is protected by copyright laws.<br/>
  * Date:  2019/8/17  星期六 10:30
  *
  * @author:Minchen
  * @Email:751914788 @qq.com
  * @version 1.0 
  */
object MethodDemo03 extends App {
  /**
    * 带有默认值的方法
    *
    * @param greeting
    */
  def withDefaultValue(greeting: String = "吃了吗?") = println(greeting)

  //如果未传入参数,使用默认,有参数则使用传入的参数
  withDefaultValue()
  withDefaultValue("我是一头猪")


  /**
    * 带多个默认值的方法
    *
    * @param a
    * @param b
    * @param c
    */
  def withDefaultValue2(a: Int = 1, b: Int, c: Int = 4) = println(s"a=$a,b=$b,c=$c")
//_表示通配符,任意个
  withDefaultValue2(1,2,3)
  //传入两个的时候按照顺序填
  withDefaultValue2(2,3)


  /**
    * 可变长参数 * ,java用...
    *
    * @param num
    */
  def varLenParam(num: Int*) = {
    for (perEle <- num)
      println(perEle)
  }
  varLenParam(1,2,3,4,5,6,7)
}

运行效果

在这里插入图片描述

函数演示

package com.mc.simple07_FunctionDemo
/**
  * Description:函数的演示<br/>
  * Copyright(c):Minchen<br/>
  * This program is protected by copyright laws.<br/>
  * Date:  2019/8/17  星期六 10:30
  *
  * @author:Minchen
  * @Email:751914788 @qq.com
  * @version 1.0
  */
object FunctionDemo extends App {
  /**
    * scala中函数演示(函数是头等公民)
    */
      //函数和方法的区别:函数是val定义,而方法def定义
      //1,有名函数
      //1)赋值式的有名函数,就是给函数的参数取个名字,表明类型
      val f1 = ((a: Int, b: Int) => a + b)
      val f2 = (a: Int, b: Int) => a + b
      val f3 = (_: Int) + (_: Int)

      println(s"调用有名函数f1后的结果是:${f1(1, 2)}")
      println(s"调用有名函数f2后的结果是:${f2(2, 2)}")
      println(s"调用有名函数f3后的结果是:${f2(3, 3)}")

      println("\n______________________________________________\n")
      //2)声明式的有名函数
      val ff1: ((Int, Int) => Int) = { (x, y) => x + y }
      val ff2: (Int, Int) => Int = (x, y) => x + y
      val ff3: (Int, Int) => Int = (_ + _)
      println(s"调用声明式的有名函数ff1后的结果是:${ff1(1, 2)}")
      println(s"调用声明式的有名函数ff2后的结果是:${ff2(2, 2)}")
      println(s"调用声明式的有名函数ff3后的结果是:${ff2(3, 3)}")


      println("\n______________________________________________\n")
      //3)函数底层的原理
      val myFun = new Function2[Int, Int, Int]() {
        /**
          * 重写特质中的apply方法
          *
          * @param v1
          * @param v2
          * @return
          */
        override def apply(v1: Int, v2: Int): Int = v1 + v2
      }

      println(s"函数的内幕,调用后的结果是:${myFun(5,5)}")

    }

运行效果

在这里插入图片描述

注意点: for循环, 函数和方法,是必须要掌握的,必须要手写得出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值