




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章学生信息处理分析班级基本情况分析第一部分学生所属班级和男女生数量以班级为单位整理学生信息情境导入
现有一份某校信息工程学院所有班级学生的基本情况数据,如下图所示。数据包含8个字段,分别为学号、姓名、性别、年级、班级、语文成绩、数学成绩、英语成绩。当下辅导员想通过一位学生的学号获知其所属的班级,同时也想对各班级基本情况进行了解,以便后续的工作开展。学习目标和要求掌握Scala判断与循环、函数式编程。掌握Scala集合操作。掌握Scala数据类型、常量与变量、运算符、数组。学生所属班级和男女生数量——理论基础1、数据类型数据类型类型描述Byte表示8位有符号补码整数。其数值区间从-128到127。Short表示16位有符号补码整数。其数值区间为-32768到32767。Int表示32位有符号补码整数。其数值区间为-2147483648到2147483647。表示只能保存整数。Long表示64位有符号补码整数。其数值区间为-9223372036854775808到9223372036854775807。Float表示32位IEEE754标准的单精度浮点数。如果浮点数后面有f或者F后缀时,表示这是一个Float类型,否则就是一个Double类型的。Double表示64位IEEE754标准的双精度浮点数。Char表示16位无符号Unicode字符,区间值为U+0000到U+FFFF。String表示字符序列。即字符串,使用时需要使用双引号包含一系列字符。Boolean其值为true或false。Unit表示无值,和其他语言中void等同。用于不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。Nullnull或空引用NothingNothing类型在Scala的类层级的最底端,是任何其他类型的子类型。AnyAny是所有其他类的超类。AnyRefAnyRef类是Scala里所有引用类(referenceclass)的基类。Scala与Java的数据类型相同,但是Scala中的数据类型都是对象即Scala没有java中的原生类型。因此Scala可以对数字等基础类型调用方法。学生所属班级和男女生数量——理论基础2、常量与变量1)定义方法在Scala中,定义常量的关键字是“val”,语法格式如下:
val常量名称:数据类型=初始值val一经初始化就无法再进行修改,否则会报错。在Scala中,定义变量的关键字是“var”,语法格式如下:
var变量名称:数据类型=初始值学生所属班级和男女生数量——理论基础2)数据类型推断
Scala具备数据类型推断的功能,因此在定义常量或者变量时,可以不用特地说明数据的类型,即可以不在常量或变量名称后面添加“:type”数据类型项。3)多变量声明学生所属班级和男女生数量——理论基础A.若声明的多个变量初始值相同,则只需用逗号分隔:B.若声明的多个变量初始值不相同,则需将它们声明为元组:3、运算符运算符类别运算符描述举例算数运算符举例中假设a=1,b=2算数运算符
+加号a+b运算结果为3-减号a-b运算结果为-1*乘号a*b运算结果为2/除号b/a运算结果为2%取余b%a运算结果为0Scala中运算符即方法、方法即运算符。学生所属班级和男女生数量——理论基础学生所属班级和男女生数量——理论基础关系运算符举例中假设a=1,b=2关系运算符==等于a==b运算结果为false>大于a>b运算结果为false<小于a<b运算结果为true>=大于等于a>=b运算结果为false<=小于等于a<=b运算结果为true!=不等于a!=b运算结果为true逻辑运算符举例中假设变量a为1,b为0逻辑运算符&&与,当两个条件均成立则为真,否则为假a&&b运算结果为false||或,当两个条件有一个成立则为真,否则为假a||b运算结果为true!非,对当前条件取反!(a&&b)运算结果为true学生所属班级和男女生数量——理论基础位运算符举例中假设a=00111100,b=00001101位运算符&按位与,数据按照二进制位进行运算,两位均为1则结果为1,否则为0a&b的运算结果为00001100|按位或,数据按照二进制位进行运算,两位有一个为1则结果为1a|b的运算结果为00111101^按位异或,数据按照二进制位进行运算,两位不同时结果为1,相同时为0a^b的运算结果为00110001~按位取反,数据按照二进制位进行运算,是1则变为0,是0则变成1~a的运算结果为11000011<<数据按照二进制位进行运算,左移a<<2的运算结果为11110000>>数据按照二进制位进行运算,右移a>>2的运算结果为00001111>>>数据按照二进制位进行运算,无符号右移a>>>2的运算结果为00001111学生所属班级和男女生数量——理论基础赋值运算符=指定右边操作结果赋值给左边c=a+b将a+b的运算结果赋值给c+=左右两侧相加后赋值给左边c+=a即c=c+a-=左右两侧相减后赋值给左边c-=a即c=c-a*=左右两侧相乘后赋值给左边c*=a即c=c*a/=左右两侧相除后赋值给左边c/=a即c=c/a%=左右两侧求余后赋值给左边c%=a即c=c%a<<=按位左移后再赋值给左边c<<=a即c=c<<a>>=按位右移后再赋值给左边c>>=a即c=c>>a&=按位与运算后赋值给左边c&=a即c=c&a|=按位或运算后再赋值给左边c|=a即c=c|a^=按位异或运算后再赋值给左边c^=a即c=c^a学生所属班级和男女生数量——理论基础4、数组
在Scala语言中,提供了一种数据结构叫作数组,数组是用于存储相同类型变量的集合。数组分为定长数组(Array)和变长数组(ArrayBuffer)。1)声明与定义方式使用new的完整形式,其语法如下:vararrname:Array[type]=newArray[type](size)使用new的简写形式,其语法如下:vararrname=newArray[type](size)使用定义并初始化的方式,其语法如下:vararrname=Array(element1,element2,element3)变长数组:定义与声明方式与定长数组的相同,但是需要先导入importscala.collection.mutable.ArrayBuffer依赖包。定长数组:学生所属班级和男女生数量——理论基础2)基本操作方法
数组的基本操作方法:基本操作描述arr.sum对于Int数据类型的数组,返回数组各元素的和arr.max对于Int数据类型的数组,返回数组各元素的最大值arr.min对于Int数据类型的数组,返回数组各元素的最小值arr.length返回数组的长度arr.sorted.toBuffer对于Int数据类型的数组,返回数组各元素由小到大排序结果arr.reverse.toBuffer对于Int数据类型的数组,返回数组各元素倒序arr.contains(x)判断数组中是否包含x元素arr.isEmpty判断数组是否为空学生所属班级和男女生数量——理论基础5、判断与循环Scala的判断与循环语法与其他计算机语言一样。if判断可以对数据进行过滤判断处理,while和for循环可以在某一条件下将某段代码进行重复执行。1)if判断if判断有三种形式,分别为if语句、if…else语句、if…elseif…else语句和if…else嵌套语句。2)循环在Scala语言中循环也有三种方式,分别为while循环、do...while循环和for循环。学生所属班级和男女生数量——理论基础6、函数式编程1)函数的定义和调用def函数名[参数列表]:[返回值类型]={
函数体return[表达式]}函数调用的方法如下:
函数名[参数列表]函数的定义方法:学生所属班级和男女生数量——理论基础2)匿名函数匿名函数是指不含函数名称的函数。使用“=>”定义,“=>”的左边为参数列表,“=>”右边为函数体表达式。匿名函数虽然没有函数名,但是可以将其赋值给一个常量或者变量,然后通过常量或者变量名进行函数调用。学生所属班级和男女生数量——理论基础3)高阶函数
高阶函数是指使用其他函数作为参数,或者使用函数作为输出结果的函数。举例:使用其他函数作为参数的高阶函数学生所属班级和男女生数量——理论基础举例,使用函数作为输出结果的高阶函数学生所属班级和男女生数量——理论基础4)闭包闭包是一个函数,是可以访问一个函数里面局部变量的另外一个函数。定义一个函数:valmore=2defaddmore=(x:Int)=>x+moreaddmore(3)定义addmore函数的过程就是“捕获”其自由变量从而“闭合”该函数的动作。学生所属班级和男女生数量——理论基础5)函数柯里化
函数编程中,接受多个参数的函数都可以转化为接受单个参数的函数,这个转化过程就是柯里化。柯里化本身也用到了闭包。//未柯里化方式defmul(x:Int,y:Int)=x*ymul(2,2)//闭包方式defmulclosure(x:Int)=(y:Int)=>x*yprintln(mulclosure(3)(4))//函数柯里化方式defmulcurry(x:Int)(y:Int)=x*yprintln(mulcurry(5)(6))学生所属班级和男女生数量——理论基础6)嵌套函数嵌套函数即在函数内部定义函数,其中内部函数称为局部函数。学生所属班级和男女生数量——编程分析实现1、判断学生所属班级
完成此任务首先需要用数组存储各个班级学生的学号,然后定义函数识别某个学生的学号获取其所属班级。1)定义班级数组2)定义distinguish函数,利用if…elseif…else语句进行判断识别学号。2、统计男女生人数信息
定义函数count(sex:String)统计男女生人数。在count(sex:String)函数中利用数组存储数据信息,通过for循环遍历数组并利用if判断数组中元素是否包含指定性别,并进行sum计数。以班级为单位整理学生信息——理论基础1、列表Scala列表与数组类似,所有元素的类型都相同。它们的区别首先是列表是不可变的,其次列表具有递归的结构而数组不是。1)定义列表定义不可变列表语法://创建一个包含值1,值2,值3,值...的不可变列表var/val变量名:List[元素类型]=List[元素类型](值1,值2,值3,值...)//使用“::”拼接方式来创建列表,必须在最后添加一个Nilval/var变量名=值1::值2::Nil以班级为单位整理学生信息——理论基础//导入相关依赖包importscala.collection.mutable.ListBuffer//创建一个空的可变列表val/var变量名:ListBuffer[类型]=newListBuffer[类型]()//创建一个包含值1,值2,值3...的可变列表val/var变量名=ListBuffer(值1,值2,值3...)定义可变列表语法:以班级为单位整理学生信息——理论基础2)列表的常用操作以下是可变和不可变列表的常用操作。方法(对列表a和b进行操作)描述a.isEmpty判断列表是否为空a++b拼接两个列表a.head获取列表的首个元素a.tail获取列表除首个元素以外的剩余部分a.reverse反转列表a.take(num)获取指定个数的前缀a.drop(num)删除从左边开始的num个元素a.toString转换字符串a.toArray将列表转换为数组List.concat(a,b)合并两个列表ersect(b)对两个列表取交集a.diff(b)对两个列表取差集a(索引值)获取列表中指定索引值的元素以班级为单位整理学生信息——理论基础可变列表的常用操作方法(对列表a和b进行操作)描述a+=元素为列表添加元素a++=b追加一个列表a-=元素删除列表中的元素a.toList将可变列表转换为不可变列表
虽然可变和不可变列表都有添加、删除、合并等操作,但是两者有一个非常大的差别。对不可变列表进行操作,会产生一个新的列表,原来的列表并没有改变。对可变列表进行操作,改变的是该列表本身。2、Set集合以班级为单位整理学生信息——理论基础Set是无序,不可重复的集合。Set集合分为可变的和不可变的。Scala默认创建的是不可变的Set集合,若要创建可变的Set集合,需要先导入依赖包。1)定义Set集合
val
变量名:Set[类型]=Set[类型](值1,值2,值3...)举例:vala=Set(9,2,5,4,8)以班级为单位整理学生信息——理论基础可变和不可变Set集合的常用操作方法方法(对Set集合a或b进行操作)描述a.drop(num)删除从左边开始的num个元素a.contains(元素)判断集合是否包含此元素a.size集合的大小a++b合并Set集合2)Set的基本操作以班级为单位整理学生信息——理论基础不可变Set集合的添加/删除操作方法方法(对不可变Set集合a和b进行操作)描述a+元素添加元素a-元素删除元素可变Set集合的添加/删除操作方法方法(对可变Set集合a和b进行操作)描述b.add(元素)添加元素b.remove(元素)删除元素b+=元素添加元素b-=元素删除元素a++=b元素合并Set集合3、元组以班级为单位整理学生信息——理论基础
元组是不同类型值的聚集,它可以将不同类型的值放在一个变量中进行存储。定义元组的语法一:valtuple=(元素1,元素2,元素3…)定义元组的语法二:valt=newTuplen(元素1,元素2,元素3...元素n)
当需要访问元组中的某个元素的值时,可以通过“元组名_元素索引”进行访问。4、Map映射以班级为单位整理学生信息——理论基础1)映射定义:
映射是一系列键值对的集合。映射中的键都是唯一的,并且可以通过键获取值。可变映射的定义需要先导入相关依赖包。2)映射的常用操作:方法(对映射a和b进行操作)描述a.keys获取所有的keya.values获取所有的valuea(key)使用key获取value,如果key不存在会报错a.contains(key)查看Map中是否存在指定的keya.isEmpty检查map是否为空a++b合并两个map,如果key重复,++后者会替换掉前边的key对应的value5、函数组合器以班级为单位整理学生信息——理论基础
函数组合器在实际操作中非常实用。组合器包括map、filter、foreach、groupBy、flatten、drop、zip等。组合器可以对集合中的每个元素进行指定的操作,并将结果形成集合输出。组合器描述map将某个函数应用到中的每个元素,并将结果形成集合输出。filter指定条件,对集合中的元素进行过滤foreach对集合中的每个元素进行作用,但是没有返回值。groupBy对集合中的元素进行分组操作,得到一个Map。flatten可以把嵌套的结构展开。drop去掉集合前面的n个元素zip将两个集合结合在一起以班级为单位整理学生信息——编程分析实现
以班级为单位整理学生信息,可以先将数据保存到列表中,然后使用groupBy组合器以班级为条件进行分组。1)在scala命令输入行输入以下命令,创建列表保存数据。valdata=List("21103,严林石,男,21级,大数据1班,89,97,91","21108,庄伟康,男,21级,大数据1班,67,94,87","21208,陈心雨,女,21级,大数据2班,84,92,91","21107,邹和俊,男,21级,大数据1班,77,83,88")以班级为单位整理学生信息——编程分析实现2)接着应用groupBy组合器进行分组,分组条件是班级。因此需要选取班级列进行操作,使用“,”对列表中每条数据进行split分隔,班级数据是在第4列。由此实现了以班级为单位整理学生信息。学生基本情况获取第二部分学生特长情况学生成绩情况分析情境导入
在掌握了前一节中Scala的基本知识后,李雷同学提出了新的疑问。Scala作为一门纯粹的面向对象的语言它的类和对象又有什么特点?定义和使用方法又是如何的?通过接下来对Scala类和对象、模式匹配等知识的学习,能对学生特长情况与成绩情况进行分析。学习目标和要求1、了解Scala类和对象、模式匹配的基本概念。2、掌握Scala类和对象、模式匹配的定义及操作方法。3、能综合应用Scala基础知识编写应用程序进行数据分析。1、类和对象学生特长情况——理论基础
类和对象是Scala面向对象语言的两个重要概念。类是对象的抽象,而对象是类的具体实例。类的定义方式如下:Class类名称(参数列表){//定义类的字段和方法}
继承是面向对象开发语言中的一个概念,继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码,可以有效复用代码。但是Scala是单继承,只能继承一个父类。继承类需要用到关键字extends。学生
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 征地合同协议书
- 汽车检测与维修作业指导书
- 小区物业场地租赁合同
- 临时活动场地租赁合同
- 中国民用航空运输合同书5篇
- 广西国汇投资担保有限公司借款担保合同8篇
- 公路货物运输合同协议
- 农业机械化装备应用作业指导书
- 公民之间借款合同书8篇
- 2025年海口经营性道路客货运输驾驶员从业资格考试
- 教科版 二年级科学上册第一单元第6课《不同的季节》同步练习(附答案解析)
- 山东省东营市2024年中考英语真题【附真题答案】
- 平安产险产品定价模型优化研究
- GB/T 12279.2-2024心血管植入器械人工心脏瓣膜第2部分:外科植入式人工心脏瓣膜
- JTG-3830-2018公路工程建设项目概算预算编制办法
- 设备维护服务方案(2篇)
- 医院检验科实验室生物安全程序文件SOP
- 生物质颗粒厂建设项目可行性研究报告
- 春新教科版四年级科学下册《电路》单元解读
- 《电力信息系统信息安全检查规范》
- 2023年考研数学一真题
评论
0/150
提交评论