scala基础入门

news2024/11/27 1:34:25

一、Scala安装

下载网址:Install | The Scala Programming Language

ideal安装

(1)下载安装Scala plugins

(2)统一JDK环境,统一为8

(3)加载Scala

(4)创建工程吧 ^_^

(5)windows+Q,查看是否有Scala

二、Scala常规知识点

(一)Scala初体验
object ScalaTest {
  def main(args: Array[String]): Unit = {
    println("hello scala!")
  }
}
//hello scala!
(二)var 变量、val 常量、Type关键字
//    var 变量
    var name :String="lisi"
    println("hi " + name)              //hi lisi
    name = "xioaming"
    println("hi " + name)              //hi xioaming
//    val 常量
    val pai = 3.1415926
    var r =10
    println("圆的面积:" + pai*r*r)     //圆的面积:314.15926
//    type关键字:给别名
    type T=String
    val name:T="java"
    println( name )                    //java
(三)Scala数据类型结构

Any:所有类型的超类(顶级类型)

AnyVal:表示值类型的超类

AnyRef:表示引用类型的超类,对应java.lang.Object

Unit:表示无值,类似于Java中的void

Nothing:所有类型的子类

Null:表示null或空引用

scala与java有着相同的原始数据类型(Byte,Short,Int,Long,Float,Double,Char,Boolend,String)

(四)字符串插值器

(1)S插值器:允许将变量引用、表达式直接插入字面字符中

(2)F插值器

(3)raw插值器

(4)拓展:Scala中值是多少取决于最后一个数据

    //(1)s插值器:允许将变量引用、表达式直接插入字面字符中
    var name = "huahua"
    println(s"hello $name")            //hello huahua
    //(2)f插值器:允许将变量引用、表达式直接插入字面字符中
    var pai=3.1415926
 /*                   10个空格 保留小数点两位
                            |  |                 */
    println(f"派的值为:$pai%10.2f")   //派的值为:      3.14
    //(3)raw插值器
    println(s"\n b")                   // b     换行
    println(raw"\n b")                 //\n b   不转义
    //(4)拓展:Scala中值是多少取决于最后一个数据
    var name = {
      "唐僧"
      println("请输出名字:")           //请输出名字:
      "李白一日游"
    }
    println(name)                     //李白一日游

(五)Scala条件控制
(1)if

语法结构:if (  ){  }  else if (  ){  } else {  }

    val age = 18
    if(age > 18){
      println("成年人")
    }else if (age == 18){
      println("18一枝花")
    }else{
      println("受未成年人保护法保护") 
    }

//18一枝花

提升版

    var age = {
      println("我是一个代码块,最后一个指令代表返回值")
      99
      11
      33
    }
    println(s"调用代码块值:$age")           //调用代码块值:33
    var resoultAge=if(age > 33) age -1 else if (age < 18 ) age +1 else age
    println(resoultAge)                    //33
(2)while

语法结构:while(){  }

    var num = 5
    while ( num <10 ){
      println(num)
      num = num+1
    }
// 5
// 6
// 7
// 8
// 9
(3) do while 

语法结构:do {  } whiel (  )

    var num = 5
    do{
      println(num)
      num=num+1
    }while(num<10)
/*  5
    6
    7
    8
    9*/
(4)for

语法结构( ){  }

    var num = 4
    for( i<-1 to num){
      println(i)
    }
/*  1
    2
    3
    4*/

 拓展:步长

    var num = 5
//    步长为2
    for( i<-1 to num by 2){
      println(i)
    }
/*  1
    3
    5*/
//    步长为5
    for( i<-1 to num by 5){
      println(i)
    }
/*1*/
(5)小试牛刀
Ⅰ、打印正三角形
    var num = 10
    for(i<-1 to num){
      for (j<-1 to i){
        print("*")
      }
      println()
    }


*
**
***
****
*****
******
*******
********
*********
**********
Ⅱ、打印等边三角形
    var num = 10
    for(i<-1 to num){
      for (j<-1 to num-i){
        print(" ")
      }
      for (j<-1 to 2*i-1){
        print("*")
      }
      println()
    }


         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
*******************
Ⅲ、打印倒三角形
    var num = 10
    for(i<-1 to num){
      for (j<-1 to num-i){
        print("*")
      }
      println()
    }
*********
********
*******
******
*****
****
***
**
*

   
 var num = 10
    for(i<-1 to num){
      for (j<-1 to i){
        print(" ")
      }
      for (j<-1 to num-i){
        print("*")
      }
      println()
    }


 *********
  ********
   *******
    ******
     *****
      ****
       ***
        **
         *
Ⅳ、打印倒等边三角形
    var num = 10
    for(i<-1 to num){
      for (j<-1 to i){
        print(" ")
      }
      for (j<-1 to 2*(num-i)-1){
        print("*")
      }
      println()
    }

 *****************
  ***************
   *************
    ***********
     *********
      *******
       *****
        ***
         *
Ⅴ、三角形抠边
    var num = 10
    for(i<-1 to num){
      for (j<-1 to num-i){
        print(" ")
      }
      for (j<-1 to 2*i-1){
        if (i == 1 || i == num || j == 1 || j == 2*i-1){
          print("*")
        }else{
          print(" ")
        }
      }
      println()
    }


         *
        * *
       *   *
      *     *
     *       *
    *         *
   *           *
  *             *
 *               *
*******************

(6)拓展:break

    import scala.util.control._
    var num = 10
    val breakA = new Breaks
    breakA.breakable{
      for (i <-1 to 10 by 2){
        if (i>5){
          breakA
        }
        println (i)
      }
    }

/*  1
    3
    5
    7
    9*/

    import scala.util.control.Breaks._
    var num = 20
    for(i<-1 to num by 2){
      if (i>5){
        break()
      }
      println(i)
    }

/*  Exception in thread "main" scala.util.control.BreakControl
    1
    3
    5*/
 (六)迭代器
//    yield:表示当for循环之后将所有值返回给result
    var num = 12
    for (i <-1 to num ;if i%2==0;if i>5 ;if i%3 == 0){
      println(i)
    }
/*  6
    12*/
    var result = for ( i <-1 to num ; if i%2==0;if i>5 ;if i%3 == 0 ) yield i
    val it : Iterator[Int]= result.iterator
    while (it.hasNext){
      println("迭代器:"+ it.next()) //6,12
    }
/*  迭代器:6
    迭代器:12*/
///   【增强for循环-----不推荐使用】
    for (re<- result){
      println("for循环取值:"+ re)
/*    for循环取值:6
      for循环取值:12*/
    }
    println(result)
    println(result(0))
    println(result(1))
/*  Vector(6, 12)
    6
    12*/
(七)数组
//    创建数组的方式一    
    var arr = new Array[String](3)
    arr(0)="华为met 50"
    arr(1)="华为met 60"
    arr(2)="华为met 70"
    for(i<-0 until arr.length){
      println(arr(i))
    }
//    创建数组的方式二  调用,伴生对象
    var arr=Array("华为met50","华为met60","华为met70")
    for (i<-0 until arr.length){
      println(arr(i))
    }
//    创建数组的方式3  区间数组
    val arr : Array[Int]=Array.range(1,10)
    val arr : Array[Int]=Array.range(1,10,2)
    println("length"+arr.length)
    for(i <-0 to arr.length-1){
      println(arr(i))
    }
(八)元组
        (1)定义了三个元组,第四个报错        
        val tp = ( "hello",3.14 , 39 )  
        println("元组的第一个元素"+tp._1)
        println("元组的第二个元素"+tp._2)
        println("元组的第三个元素"+tp._3)
        println("元组的第四个元素"+tp._4)
 
        (2)输出:scala
        val tp2=("A",2,'a',4,"scala",6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)
        println(tp2._5)

        (3)最多22个,超过22个报错
        val tp2=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)
        //Error:(253, 17) too many elements for tuple: 25, allowed: 22
        // val tp2=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)

        (4)定义三种类型元组
        println(new Tuple3[Boolean,Double,Int](true,3.24,100))
        //(true,3.24,100)

        (5)遍历元组
        val tp4=("A",2,'a',4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)
        【方式一】
        val iterator : Iterator[Any] = tp4.productIterator
        for (elem<-iterator){
          println(elem)
        }
       【方式二】
        tp4.productIterator.foreach(x=>println(x))
(九)可变集合
        val list1 = scala.collection.immutable.List(1,3,6)
        list1.foreach(println)
//        lamda函数
        list1.foreach( x =>println(x))
        val ints = List(1,2,4)
        println(ints.getClass)
        val builder: StringBuilder= ints.addString(new StringBuilder("1234"))
        println("------------------------------")
        val int2:List[Int]=ints.drop(1)
        int2.foreach(println(_))
        println("------------------------------")
        ints.foreach(println(_))
        println("------------------------------")
(十)不可变集合
        val list = scala.collection.mutable.ListBuffer(1,3,6)
        println(list(2))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1053070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单调队列 - 滑动窗口

154. 滑动窗口 - AcWing题库 O(1)求窗口中的最大值/最小值 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long long ll; typedef long double l…

gdb的使用

目录 gdb工具的使用 代码调试相关指令 运行程序指令 r 显示代码的指令 l 给代码打断点 b 查看断点位置 info b 执行代码到断点处停止 关闭断点 d断点编号 关闭某个断点&#xff0c;但不删除 disable编号 打开某个断点 enable断点编号 逐过程调试代码 n 逐语句调试代码 s 查看…

【外设】拓展坞接入外设一直弹窗报错问题

外设相关&#xff1a;多功能拓展坞安装后使用正常但计算机一直弹窗报错 1.基本配置信息&#xff1a; 拓展坞&#xff1a;绿联6合1 笔记本&#xff1a;lenovo &#xff08;硬件:13^i5;系统&#xff1a;win11&#xff09; 外设&#xff1a;1键1鼠1显示器1硬盘 2.存在的问题&am…

LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 问题解决

LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 解决 文章目录 问题背景方法一&#xff1a;使用预编译指令方法二&#xff1a;使用相同的环境 参考链接附录 问题背景 Visual Studio 2019 对 CMakeLists.txt 的支持不是很好&#xff0c;使用 “文…

【单片机】12-串口通信和RS485

1.通信有关的常见概念 区分&#xff1a;串口&#xff0c;COM口&#xff0c;UART&#xff0c;USART_usart和串口区别-CSDN博客 串口、COM口、UART口, TTL、RS-232、RS-485区别详解-CSDN博客 1.什么是通信 &#xff08;1&#xff09;人和人之间的通信&#xff1a;说话&#xff…

java项目之校园餐厅管理(ssm源码+文档)

项目简介 校园餐厅管理实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、商家管理、用户管理、菜系类别管理、校园美食管理、在线下单管理、美食论坛、系统管理。商家前台&#xff1a;首页、校园美食、论坛信息、新闻资讯、我的、跳转到后台、客服。商家&#xff1a;…

第4讲:vue内置命令(文本插值,属性绑定,v-text,v-html)

MVVM 什么是MVVM&#xff1f; MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化&#xff0c;让我们将视图 UI 和业务逻辑分开。 View层&#xff1a; 视图层 在我们前端开发中&#xff0c;通常就是 DOM 层。 主要的作用是…

Error: Activity class {xxx.java} does not exist

git切换到不同的branch之后&#xff0c;报下面的错误&#xff1a; Error: Activity class {xxx.java} does not exist 解决方案&#xff1a; 首先clean 然后会删除build目录 然后点击&#xff1a;Invalidate Caches Android Studio重启&#xff0c;然后重新build即可。

四、2023.9.30.C++面向对象end.4

文章目录 49、 简述一下什么是常函数&#xff0c;有什么作用&#xff1f;50、 说说什么是虚继承&#xff0c;解决什么问题&#xff0c;如何实现&#xff1f;51、简述一下虚函数和纯虚函数&#xff0c;以及实现原理&#xff1f;52、说说纯虚函数能实例化吗&#xff0c;为什么&am…

Python实验二

1&#xff1a;编程计算 1&#xff5e;100 偶数的和。 要求&#xff1a;输出结果为整数&#xff0c;宽度为 8&#xff0c;居中对齐&#xff0c;空白处填充符号“*”。 提示&#xff1a; range(2,101,2)生成的整数列表从 2 开始到 100 结束&#xff0c;步长为 2&#xff0c;即 …

华为云云耀云服务器L实例评测|云耀云服务器L实例部署Linux管理面板mdserver-web

华为云云耀云服务器L实例评测&#xff5c;云耀云服务器L实例部署Linux管理面板mdserver-webl 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点 二、mdserver-web介绍2.1 mdserver-web简介2.2 mdserver-web特点2.3 主要插件介绍 三、本次实践介绍…

高数:第二章:一元函数微分学

文章目录 一、导数与微分1.导数的概念(1)导数的定义(2)左右导数(3)定理&#xff1a;可导与左右导数的关系(4)可导三要素(5)用导数定义判断可导性 2.微分的概念(1)微分的定义(2)微分与可导的关系 3.导数与微分的几何意义(1)导数 f ′ ( x 0 ) f(x_0) f′(x0​)的几何意义&#x…

【LLM】Windows10环境部署阿里通义千问大模型(Qwen-14B-Chat-Int4)

文章目录 环境文件准备项目代码模型相关文件 运行准备工作运行demo Tips 环境 系统版本&#xff1a;Windows 10 企业版 版本号&#xff1a;20H2 系统类型&#xff1a;64 位操作系统, 基于 x64 的处理器 处理器&#xff1a;Intel Core™ i7-13700K CPU 3.40GHz 机带 RAM&#…

1340. 跳跃游戏 V;2039. 网络空闲的时刻;2767. 将字符串分割为最少的美丽子字符串

1340. 跳跃游戏 V 核心思想&#xff1a;动态规划记忆化搜索。定义dfs(i)&#xff0c;表示从i开始最多可以访问多少个下标&#xff0c;然后统计往左跳和往右边跳的最大值&#xff0c;思路其实比较简单&#xff0c;但是代码我感觉还是不太好想。 2039. 网络空闲的时刻 核心思想…

CH347读写SPI Flash

CH347读写SPI Flash 前面耽搁了几天&#xff0c;今天终于把CH347 SPI接口调试好了。 CH347动态库中SPI接口函数如下&#xff1a; typedef struct _SPI_CONFIG{UCHAR iMode; // 0-3:SPI Mode0/1/2/3UCHAR iClock; // 060…

数据分析方法:RFM模型

一、RFM基本原理 RFM是三个单词的缩写&#xff1a; 最近一次消费时间&#xff08;Recency&#xff09;&#xff0c;取数的时候一般取最近一次消费记录到当前时间的间隔&#xff0c;比如&#xff1a;7天、30天、90天未到店消费&#xff1b;直观上&#xff0c;一个用户太久不到…

Windows 下安装及配置 MySQL 8.1 (图文教程)

目录 下载 MySQL安装 MySQL配置 MySQL修改密码配置环境变量 卸载 MySQL开源项目微服务商城项目前后端分离项目 下载 MySQL 访问 MySQL 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 下载 MySQL 时&#xff0c;你可以选择 ZIP 包或 MSI 安装&#xff1a; ZIP包…

智能合约漏洞,Dyna 事件分析

智能合约漏洞&#xff0c;Dyna 事件分析 1. 漏洞简介 https://twitter.com/BlockSecTeam/status/1628319536117153794 https://twitter.com/BeosinAlert/status/1628301635834486784 2. 相关地址或交易 攻击交易 1&#xff1a; https://bscscan.com/tx/0x7fa89d869fd1b89e…

【Java 进阶篇】MySQL 事务详解

在数据库管理中&#xff0c;事务是一组SQL语句的执行单元&#xff0c;它们被视为一个整体。事务的主要目标是保持数据库的一致性和完整性&#xff0c;即要么所有SQL语句都成功执行&#xff0c;要么所有SQL语句都不执行。在MySQL中&#xff0c;事务起到了非常重要的作用&#xf…

【C++】map、set,multiset和multimap的使用及底层原理【完整版】

目录 一、map和set的使用 1、序列式容器和关联式容器 2、set的使用讲解 3、map的使用讲解 二、multiset和multimap 1、multiset和multimap的使用 2、OJ题&#xff1a;前k个高频单词 一、map和set的使用 1、序列式容器和关联式容器 序列式容器&#xff1a;vector/list/s…