当前位置: 首页 > news >正文

scala基础入门

一、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 lisiname = "xioaming"println("hi " + name)              //hi xioaming
//    val 常量val pai = 3.1415926var r =10println("圆的面积:" + pai*r*r)     //圆的面积:314.15926
//    type关键字:给别名type T=Stringval 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 = 18if(age > 18){println("成年人")}else if (age == 18){println("18一枝花")}else{println("受未成年人保护法保护") }//18一枝花

提升版

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

语法结构:while(){  }

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

语法结构:do {  } whiel (  )

    var num = 5do{println(num)num=num+1}while(num<10)
/*  56789*/
(4)for

语法结构( ){  }

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

 拓展:步长

    var num = 5
//    步长为2for( i<-1 to num by 2){println(i)}
/*  135*/
//    步长为5for( i<-1 to num by 5){println(i)}
/*1*/
(5)小试牛刀
Ⅰ、打印正三角形
    var num = 10for(i<-1 to num){for (j<-1 to i){print("*")}println()}*
**
***
****
*****
******
*******
********
*********
**********
Ⅱ、打印等边三角形
    var num = 10for(i<-1 to num){for (j<-1 to num-i){print(" ")}for (j<-1 to 2*i-1){print("*")}println()}*********************************************************************************
*******************
Ⅲ、打印倒三角形
    var num = 10for(i<-1 to num){for (j<-1 to num-i){print("*")}println()}
*********
********
*******
******
*****
****
***
**
*var num = 10for(i<-1 to num){for (j<-1 to i){print(" ")}for (j<-1 to num-i){print("*")}println()}*********************************************
Ⅳ、打印倒等边三角形
    var num = 10for(i<-1 to num){for (j<-1 to i){print(" ")}for (j<-1 to 2*(num-i)-1){print("*")}println()}*********************************************************************************
Ⅴ、三角形抠边
    var num = 10for(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 = 10val breakA = new BreaksbreakA.breakable{for (i <-1 to 10 by 2){if (i>5){breakA}println (i)}}/*  13579*/import scala.util.control.Breaks._var num = 20for(i<-1 to num by 2){if (i>5){break()}println(i)}/*  Exception in thread "main" scala.util.control.BreakControl135*/
 (六)迭代器
//    yield:表示当for循环之后将所有值返回给resultvar num = 12for (i <-1 to num ;if i%2==0;if i>5 ;if i%3 == 0){println(i)}
/*  612*/var result = for ( i <-1 to num ; if i%2==0;if i>5 ;if i%3 == 0 ) yield ival it : Iterator[Int]= result.iteratorwhile (it.hasNext){println("迭代器:"+ it.next()) //6,12}
/*  迭代器:6迭代器:12*/
///   【增强for循环-----不推荐使用】for (re<- result){println("for循环取值:"+ re)
/*    for循环取值:6for循环取值:12*/}println(result)println(result(0))println(result(1))
/*  Vector(6, 12)612*/
(七)数组
//    创建数组的方式一    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)输出:scalaval 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.productIteratorfor (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))

相关文章:

scala基础入门

一、Scala安装 下载网址&#xff1a;Install | The Scala Programming Language ideal安装 &#xff08;1&#xff09;下载安装Scala plugins &#xff08;2&#xff09;统一JDK环境&#xff0c;统一为8 &#xff08;3&#xff09;加载Scala &#xff08;4&#xff09;创建工…...

【Java-LangChain:面向开发者的提示工程-5】推断

第五章 推断 推断任务可以看作是模型接收文本作为输入&#xff0c;并执行某种分析的过程。其中涉及提取标签、提取实体、理解文本情感等等。如果你想要从一段文本中提取正面或负面情感&#xff0c;在传统的机器学习工作流程中&#xff0c;需要收集标签数据集、训练模型、确定如…...

【C++】手撕vector(vector的模拟实现)

手撕vector目录&#xff1a; 一、基本实现思路方针 二、vector的构造函数剖析&#xff08;构造歧义拷贝构造&#xff09; 2.1构造函数使用的歧义问题 2.2 vector的拷贝构造和赋值重载&#xff08;赋值重载不是构造哦&#xff0c;为了方便写在一起&#xff09; 三、vector的…...

智能指针那些事

​《Effective Modern C》学习笔记之条款二十一&#xff1a;优先选用std::make_unique和std::make_shared,而非直接new - 知乎...

Fiddler抓取手机https包的步骤

做接口测试时&#xff0c;有时我们需要使用fiddler进行抓包分析&#xff0c;那么如何抓取https包。主要分为以下七步&#xff1a; 1.设置fiddler选项&#xff1a;Tools->Options,按如下图勾选 2.下载并安装Fiddler证书生成器 下载地址&#xff1a;http://www.telerik.com/…...

idea没有maven工具栏解决方法

背景&#xff1a;接手的一些旧项目&#xff0c;有pom文件&#xff0c;但是用idea打开的时候&#xff0c;没有认为是maven文件&#xff0c;所以没有maven工具栏&#xff0c;不能进行重新加载pom文件中的依赖。 解决方法&#xff1a;选中pom.xml文件&#xff0c;右键 选择添加为…...

levelDB引擎

一、背景 1.1、影响磁盘性能的因素&#xff1a; 主要受限于磁盘的寻道时间&#xff0c;优化磁盘数据访问的方法是尽量减少磁盘的IO次数。磁盘数据访问效率取决于磁盘IO次数&#xff0c;而磁盘IO次数又取决于数据在磁盘上的组织方式。磁盘数据存储大多采用B树类型数据结构&…...

IM同步服务

设计概述 后台同步方案的设计就是数据存储结构的设计&#xff0c;如何快速体现“信息变化”&#xff0c;如何快速计算出“变化信息”。后台数据存储结构是由同步协议中同步契约决定的。 设计方案 该方案的同步是按照业务粒度来划分&#xff0c;只需要同步sdk要求同步的数据。…...

MySQL 运维常用脚本

常用功能脚本 1.导出整个数据库 mysqldump -u 用户名 -p –default-character-setlatin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件…...

ABC322刷题记

ABC322刷题记 T1.A A - First ABC 2。 妥妥的简单题…… 用find函数做就行。&#xff08;如果不存在那个子串就返回-1&#xff0c;否则返回第一次出现位置&#xff09; 注意题目中编号是从1开始的。 时间复杂度&#xff1a;O(log(n))。find函数有一定代价&#xff0c;我记…...

visual studio的安装及scanf报错的解决

visual studio是一款很不错的c语言编译器 下载地址&#xff1a;官网 点击后跳转到以下界面 下滑后点击下载Vasual Sutdio&#xff0c;选择社区版即可 选择位置存放下载文件后&#xff0c;即可开始安装 安装时会稍微等一小会儿。然后会弹出这个窗口&#xff0c;我们选择安装位…...

React生命周期

React的生命周期主要是指React组件从创建到销毁的过程&#xff0c;包括三个阶段&#xff1a;挂载期&#xff08;实例化期&#xff09;、更新期&#xff08;存在期&#xff09;、卸载期&#xff08;销毁期&#xff09; 挂载期&#xff1a; constructor&#xff08;props&#…...

SpringBoot整合RocketMQ笔记

SpringBoot版本为2.3.12.Release RocketMQ对比kafka 学习链接 https://zhuanlan.zhihu.com/p/335216381 代码实战 https://www.cnblogs.com/RedOrange/p/17401238.html Centos安装rocketmq https://blog.csdn.net/chuige2013/article/details/123783612 RocketMQ详细配置与…...

【【萌新的RiscV学习之在写代码之前对于关键路径的分析-11】】

萌新的RiscV学习之在写代码之前对于关键路径的分析-11 首先我们最简单的control 模块 全分段 因为只有分段 &#xff0c; 分开使用之后 &#xff0c; 各个阶段的具体功能才会合理使用 就像是为了后续 “气泡” 赋值 为 0 还有单独比较前递这种 EX &#xff1a; ALUOP ALUSrc …...

A. Sequence with Digits

题目&#xff1a;样例&#xff1a; 输入 8 1 4 487 1 487 2 487 3 487 4 487 5 487 6 487 7输出 42 487 519 528 544 564 588 628 思路&#xff1a; 暴力模拟题&#xff0c;看这数据范围&#xff0c;有些人可能会被唬住&#xff0c;以为是高精度或者容易超时&#xff0c;实际上…...

gitlab配置webhook限制提交注释

一、打开gitlab相关配置项 vim /etc/gitlab/gitlab.rb gitlab_shell[custom_hooks_dir] "/etc/gitlab/custom_hooks" 二、创建相关文件夹 mkdir -p /etc/gitlab/custom_hooks mkdir -p /etc/gitlab/custom_hooks/post-receive.d mkdir -p /etc/gitlab/custom_h…...

蓝桥杯Python scratch C++选拔赛stema个人如何报名?

如果不会操作&#xff0c;可以微信makytony协助。...

Cesium实现动态旋转四棱锥(2023.9.11)

Cesium实现动态悬浮旋转四棱锥效果 2023.9.11 1、引言2、两种实现思路介绍2.1 思路一&#xff1a;添加已有的四棱锥&#xff08;金字塔&#xff09;模型实现&#xff08;简单但受限&#xff09;2.2 思路二&#xff1a;自定义四棱锥几何模型实现&#xff08;复杂且灵活&#xff…...

2023最新PS(photoshop)Win+Mac免费下载安装包及教程内置AI绘画-网盘下载

2023最新PS(photoshop)WinMac免费下载安装包及教程内置AI绘画-网盘下载 2023最新PS(photoshop)免费下载安装教程来咯&#xff5e; 「PhotoShop」全套&#xff0c;winmac&#xff1a; https://pan.quark.cn/s/9d8d8ef5c400#/list/share 所有版本都有 1&#xff0c;复制链接…...

【JAVA】为什么要使用封装以及如何封装

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 前言 Java的封装指的是在一个类中将数据和方法进行封装&#xff0c;使其可以保护起来&#xff0c;只能在该类内部访问&#xff0c;而不允许外部直接访问和修改。这是Java面向对象编程的三…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...