当前位置:   article > 正文

scala基本语法_scala 清屏

scala 清屏

 

 

一.Scala中的数据类型和变量常量

1、注意:在Scala中,任何数据都是对象。和Java不同。

举例:
        在Java中 1 是基本数据类型。

        cmd中 清屏快捷键:ctrl+l
        scala> 2.    (Tab键查看方法)

  1. scala> 2.
  2. != + << >= abs compareTo getClass isNaN isValidChar isWhole round to toDegrees toInt toShort underlying
  3. % - <= >> byteValue doubleValue intValue isNegInfinity isValidInt longValue self toBinaryString toDouble toLong unary_+ until
  4. & / == >>> ceil floatValue isInfinite isPosInfinity isValidLong max shortValue toByte toFloat toOctalString unary_- |
  5. * < > ^ compare floor isInfinity isValidByte isValidShort min signum toChar toHexString toRadians unary_~

在scala中 2是对象。用法:
        scala> 2.toDouble
        res4: Double = 2.0

二. 数值类型:Byte,Short,Int,Long,Float,Double

  1. Byte:  8位有符号数字,从-128 到 127

  2. Short: 16位有符号数据,从-32768 到 32767

  3. Int:  32位有符号数据  -2147483648-2147483647(20亿)

  4. Long: 64位有符号数据   -9223372036854775808-9223372036854775807

字符串 String 字符 Char
      

  1. java和scala对比:
  2. scala> var s1 : String = "Hello world"
  3. Java : String s1 = "Hello world"


        
      

  1.  scala> var s1 : String = "Hello world"
  2.         s1: String = Hello world
  3.         scala> "My name is Tom and ${s1}"
  4.         res6: String = My name is Tom and ${s1}

 
        
      

   需要在前面加入s才可以进行插值操作

  1.  scala> s"My name is Tom and ${s1}"
  2.         res7: String = My name is Tom and Hello world

三、变量 var 和 常量 val


    常量 val:
    

  1. scala> val b : Int = 11
  2.     b: Int = 11

    常量的值不可以改变
  

  1.  scala> b = 12
  2.     <console>:12: error: reassignment to val
  3.            b = 12
  4.              ^

  

  变量 var:

  

  1. scala> var a : Int = 11
  2.     a: Int = 11

    变量的值可以改变
  

  1.  scala> a = 12
  2.     a: Int = 12
  1. scala> a=001
  2. <console>:1: error: Decimal integer literals may not have a leading zero. (Octal syntax is obsolete.)
  3. a=001
  4. ^

 

错误:十进制整数文本不能有前导零。(八进制语法已过时。)

error: Decimal integer literals may not have a leading zero. (Octal syntax is obsolete.)


    
    scala自动类型推导:
  

  1.   scala> var a = 11
  2.     a: Int = 11
  3.     scala> var a = "Hello"
  4.     a: String = Hello
  5.     scala> val a = 11
  6.     a: Int = 11

 

索引越界:

  1. scala> val a:Byte = 128
  2. <console>:11: error: type mismatch;
  3.  found   : Int(128)
  4.  required: Byte
  5.        val a:Byte = 128
  6.                     ^

 

四、unit类型 Nothing类型
        
        (1)Unit 类型,相当于Java中的void,就是没有返回值。
        
      

  1.  scala> val f = ()
  2.         f: Unit = ()

         小括号代表一个函数,这个函数没有返回值
        
        (2)Nothing 类型,在执行过程中,产生Exception
        
      

  1.  scala> def myFunction = throw new Exception("Some Error")
  2.         myFunction: Nothing
  3.         
  1. scala> def myexception=throw new Exception("yufa exception")
  2. myexception: Nothing


   

五、函数:是scala的头等公民
    
    (一)scala内置函数,可以直接使用
    
      

  1.  scala> max(1,2)
  2.         <console>:12: error: not found: value max
  3.                max(1,2)
  4.                ^


        错误原因,没有引入math包

      

  1.  scala> import scala.math._
  2.         import scala.math._

    

  1.     scala> max(1,2)
  2.         res9: Int = 2


        说明:


        _ 相当于Java中的*,代表这个包下所有的东西。
        
      

  res9: Int = 2


        本质:定义了一个变量,res9,保存执行结果,推导出res9类型是Int。
        
      

  1.  scala> var a1 : Int = max(1,2)
  2.         a1: Int = 2


        
        也可以省略类型声明
      

  1.  scala> var a2 = max(2,3)
  2.         a2: Int = 3
  3.         

 

  1. scala> var a=max(90,89)
  2. a: Int = 90


    (二)自定义函数: 关键字 def
        格式: def 函数名称(参数列表 举例 x : Int, y : Int) : 返回值类型 = {
            函数实现
        }
        
        举例:
        1、求和
        
        

  1. scala> def sum(x:Int,y:Int) : Int = x + y
  2.         sum: (x: Int, y: Int)Int
  3.         scala> sum(10,20)
  4.         res10: Int = 30
  5.         scala> var a = sum(10 , 20)
  6.         a: Int = 30


        
        2、求阶乘 递归
        
      

  1.  scala> def myFactor(x:Int) : Int = {
  2.              | if (x <= 1)
  3.              | 1
  4.              | else
  5.              | x*myFactor(x-1)
  6.              | }
  7.         myFactor: (x: Int)Int


        
        注意:没有return语句。函数的最后一句话就是函数的返回值。
        上面例子中,有函数的分支,1 和 x*myFactor(x-1) 都有可能是函数的最后一句话。
        相当于在前面都有return
        
      

  1.  scala> myFactor(5)
  2.         res11: Int = 120
  3.         


        3、求输入的年份是否是闰年
        普通闰年:能被4整除但不能被100整除的年份为普通闰年(如 2004年就是闰年,1999年不是闰年)
        世纪闰年:能被400整除的为世纪闰年(如 2000年就是世纪闰年 1900年不是世纪闰年)
        
      

  1.   scala> def isLeapYear(x:Int)={
  2. | if(x%4 == 0 && x%100 !=0 ||x % 400 == 0)
  3. | true
  4. | else
  5. | false
  6. | }
  7. isLeapYear: (x: Int)Boolean

 结果:

  1. 注意:在定义函数的时候,可以不写返回值类型,Scala会帮咋们自动推导对应的数据类型
  2. scala> isLeapYear(1600)
  3. res11: Boolean = true
  4. scala> isLeapYear(2000)
  5. res12: Boolean = true
  6. scala> isLeapYear(2019)
  7. res13: Boolean = false
  8. scala> isLeapYear(2020)
  9. res14: Boolean = true
  10. scala> isLeapYear(2004)
  11. res15: Boolean = true
  12. ```

六.循环语句

      

 

  1. package day1018
  2. import scala.math.sqrt
  3. import util.control.Breaks._
  4. /**
  5. * 作者:Jackson
  6. * Created by root on 2019/10/18
  7. * scala循环
  8. *
  9. * object相当于 java中的static(静态的)
  10. *
  11. * java中是使用static关键字,表示静态
  12. *
  13. * Object中所有的内容都是静态的
  14. */
  15. object Demo1 {
  16. def main(args: Array[String]): Unit = {
  17. //for循环
  18. //定义一个集合
  19. println("----------for循环第一种写法-----------")
  20. var list = List("Jack", "Tom", "andy", "plus")
  21. for (s <- list) println(s)
  22. //<-表示scala中的提取符,把list中的每一个元素提取出来赋值给s
  23. println("----------for循环第二种写法-----------")
  24. for {
  25. s <- list
  26. if (s.length > 3)
  27. } println(s)
  28. println("----------for循环第三种写法-----------")
  29. for (s <- list if s.length <= 3) println(s)
  30. //使用yield关键字 作用:产生一个新的集合
  31. println("----------for循环第四种写法-----------")
  32. var newList = for {
  33. s <- list
  34. s1 = s.toUpperCase() //把名字变成大写
  35. } yield (s1)
  36. for (s1 <- newList) println(s1)
  37. println("----------while循环写法-----------")
  38. //定义循环变量
  39. var i = 0
  40. while (i < list.length) {
  41. println(list(i))
  42. i += 1
  43. }
  44. println("----------do while循环写法-----------")
  45. //定义循环变量
  46. var j = 0
  47. do {
  48. println(list(j))
  49. j += 1
  50. } while (j < list.length)
  51. println("----------foreach循环写法-----------")
  52. list.foreach(println)
  53. //foreach函数,就是把每个元素取出来赋值给参数的函数->println 打印出来list中每个元素
  54. //foreach以后用的非常多
  55. /**
  56. * 判断101-200之间有多少个素数
  57. *
  58. * 程序分析实现方法:
  59. * 判断一个素数的方法:
  60. * 用一个数分别去除2到sprt(这个数),如果可以被整除,则表明此数不是素数,反之是素数
  61. *
  62. * 程序实现方法:
  63. * 定义俩层循环
  64. * 第一层:101到200
  65. * 第二层:2->sqrt(第一层循环的数)
  66. *
  67. * 举例:16
  68. * 2循环到sqrt(16)4
  69. **/
  70. print("--------循环嵌套---------")
  71. var index_inner = 0
  72. var count = 0
  73. for (index_outner <- 101 until 200) {
  74. var b = false
  75. breakable {
  76. index_inner = 2
  77. while (index_inner <= sqrt(index_outner)) {
  78. if (index_outner % index_inner == 0) {
  79. //是素数
  80. b = true
  81. break
  82. }
  83. index_inner += 1
  84. }
  85. }
  86. if (!b) count += 1
  87. }
  88. println("个数为:" + count)
  89. }
  90. }

 

                                                                                                                                    ————保持饥饿,保持学习

                                                                                                                                                                Jackson_MVP

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/864487
推荐阅读
  

闽ICP备14008679号