zoukankan      html  css  js  c++  java
  • scala记录(1)scala基础

    1.基础数据类型

    2.常量和变量的声明

    • 定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int = 10
    • 常量不可再赋值
        /**
         * 可以在变量名后面加上变量类型,不加的话会自己推断类型
         * 另外scala换行的时候可以不加分号,多行代码写在一行要用分号隔开。
         * 如以下声明方式
         * 定义变量和常量
         * 变量 :用 var 定义 ,可修改 
         * 常量 :用 val 定义,不可修改
         * 只有这两种声明方式
         */
        var a = 10
        val b = 10
        var c:Int = 10
        val d:String = "a"

    3.类和对象

    类(class):

    /**
     * 类的声明可以带构造器,直接写在类的名字后面,如Person,构造器需要传入的参数必须带上类型
     * 同样也可以不带,如Son
     * class 是scala中的类,类可以传参,传参就有了默认的构造函数。类中的属性默认就有getter,setter方法。重写构造,第一行要调用默认的构造
     * 当new 一个class时,类中除了方法不执行,其他都执行。同一个包下,class的名称不能相同。
     */
    class Son{
      val name = "erzi"
      var age = 19
    }
    class Person(xname:String,xage:Int){
      val name = xname
      var age = xage
      var gender = 'm'
      /**
       * 重写构造,如下,同JAVA,重写构造器方法的第一行需调用原始构造器
       */
      def this(yname:String,yage:Int,ygender:Char){
        this(yname,yage)
        this.gender = ygender 
      }
      def sayName() = {
        println(this.name+"---"+this.age+"---"+this.gender)
      }
    }

    对象(object):不可以传参

    有一篇详细的关于Object的博文:https://blog.csdn.net/ym01213/article/details/81105556

    object LearnClass {
      
      def main(args: Array[String]): Unit = {
    /**
     * scala中定义在object中的变量,方法都是静态的,object叫对象,相当于java中的单例对象。object不可以传参,Trait也不可传参。
     * scala中 如果一个class名称和object的名称一致,那么这个class叫做这个object的伴生类,这个object叫做这个class的伴生对象,他们之间可以互相访问私有变量。
     */
        val person = new Person("zhangsan",18)
        person.sayName()
        
        val person1 = new Person("lisi",11,'f')
        person1.sayName()
    
      }
    }

    伴生类和伴生对象:

    一个class名称和object的名称一致,那么这个class叫做这个object的伴生类,这个object叫做这个class的伴生对象,他们之间可以互相访问私有变量

    class Person(xname :String , xage :Int){
      var name = Person.name
      val age = xage
      var gender = "m"
      def this(name:String,age:Int,g:String){
        this(name,age)
        gender = g
      }
      
      def sayName() = {
        "my name is "+ name
      }
    
    }
    
    object Person {
      val name = "zhangsanfeng"
      
      def main(args: Array[String]): Unit = {
        val person = new Person("wagnwu",10,"f")
        println(person.age);
        println(person.sayName())
        println(person.gender)
      }
    }

     4.if..else

      /**
         * if else 
         */
        val age =18 
        if (age < 18 ){
            println("no allow")
        }else if (18<=age&&age<=20){
            println("allow with other")
        }else{
            println("allow self")
        }

    5.for,while,do...while

    5.1to和until 的用法(不带步长,带步长区别)

     /**
         * to和until
         * 例:
         * 1 to 10 返回1到10的Range数组,包含10
         * 1 until 10 返回1到10 Range数组 ,不包含10
         */
        
        println(1 to 10 )//打印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
        println(1.to(10))//与上面等价,打印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
        
        println(1 to (10 ,2))//步长为2,从1开始打印 ,1,3,5,7,9
        println(1.to(10, 2)) 
        
        println(1 until 10 ) //不包含最后一个数,打印 1,2,3,4,5,6,7,8,9
        println(1.until(10))//与上面等价
        
    println(1 until (10 ,3 ))//步长为2,从1开始打印,打印1,4,7

    5.2创建for循环

     /**
         * for 循环
         * 
         */
        for( i <- 1 to 10 ){
          println(i)
        }

    5.3创建多层for循环

        //可以分号隔开,写入多个list赋值的变量,构成多层for循环
        //scala中 不能写count++ count-- 只能写count+
        var count = 0;
        for(i <- 1 to 10; j <- 1 until 10){
          println("i="+ i +",    j="+j)
          count += 1
        }
        println(count);
        
        //例子: 打印小九九
        for(i <- 1 until 10 ;j <- 1 until 10){
          if(i>=j){
              print(i +" * " + j + " = "+ i*j+"    ")
          }
          if(i==j ){
            println()
          }
        }

    5.4 for循环中可以加条件判断,可以使用分号隔开,也可以不使用分号

      //可以在for循环中加入条件判断
        for(i<- 1 to 10 ;if (i%2) == 0 ;if (i == 4) ){
          println(i)
    }

    5.5scala中不能使用count++,count—只能使用count = count+1 ,count += 1

    5.6for循环用yield 关键字返回一个集合

    5.7while循环,while(){},do {}while()

        //将for中的符合条件的元素通过yield关键字返回成一个集合
        val list = for(i <- 1 to 10  ; if(i > 5 )) yield i 
        for( w <- list ){
          println(w)
    }
    
       /**
         * while 循环
         */
        var index = 0 
        while(index < 100 ){
            println("第"+index+"次while 循环")
          index += 1 
        }
        index = 0 
        do{
            index +=1 
            println("第"+index+"次do while 循环")
    }while(index <100 )
  • 相关阅读:
    401. Binary Watch
    46. Permutations
    61. Rotate List
    142. Linked List Cycle II
    86. Partition List
    234. Palindrome Linked List
    19. Remove Nth Node From End of List
    141. Linked List Cycle
    524. Longest Word in Dictionary through Deleting
    android ListView详解
  • 原文地址:https://www.cnblogs.com/kpsmile/p/10371836.html
Copyright © 2011-2022 走看看