实验1,计算级数:

首先打开安装完scala ide的eclipse,在eclipse 中新建一个scala project。

然后新建一个scala的object对象

导入scala.io.StdIn包,用以实现接受键盘输入

在新建的object对象中,新建main函数,并添加以下代码实现:

package sn
import scala.io.StdIn object test {
def main(args: Array[String]): Unit = {
println("请输入Sn的n值用以计算Sn=2/1+3/2+4/3+...+(n+1)/n来计算Sn的值");
var q:Int=StdIn.readInt();
var i:Int=0;
var sum:Float=0.0f;
for(i <- 1 to q)
{
var id:Float =i;
sum+=(id+1)/id;
}
println("当n="+q+"时,Sn的值为"+sum);
}
}

运行结果:

实验2,模拟图形绘制

case class Point(var x:Double,var y:Double) extends Drawable{
def shift(deltaX:Double,deltaY:Double){
x+=deltaX;
y+=deltaY
}
}
trait Drawable{
def draw()
{
println(this.toString)
}
} // 请完成 Shape 类、Line 类和 Circle 类的定义。 object MyDraw{
def main(args: Array[String]) {
val p=new Point(10,30)
p.draw;
val line1 = new Line(Point(0,0),Point(20,20))
line1.draw
line1.moveTo(Point(5,5))
//移动到一个新的点
line1.draw
line1.zoom(2)
//放大两倍
line1.draw
val cir= new Circle(Point(10,10),5)
cir.draw
cir.moveTo(Point(30,20))
cir.draw
cir.zoom(0.5)
cir.draw
}
}

其Shape,Line和Circle的定义如下:

abstract class Shape(var startPoint:Point) extends Drawable
{
def moveTo(newPoint:Point)
{
startPoint =newPoint;
}
def zoom(num:Double);
}
class Line(x1:Point,var x2:Point) extends Shape(x1)
{
override def zoom(num:Double)
{
val midPoint=Point((x2.x+startPoint.x)/2,(x2.y+startPoint.y)/2)
startPoint.x=midPoint.x+num*(startPoint.x-midPoint.x)
startPoint.y=midPoint.y+num*(startPoint.y-midPoint.y)
x2.x=midPoint.x+num*(x2.x-midPoint.x)
x2.y=midPoint.y+num*(x2.y-midPoint.y)
}
override def moveTo(newPoint:Point)
{
var x=(newPoint.x-startPoint.x);
var y=(newPoint.y-startPoint.y);
startPoint=newPoint;
x2.shift(x, y)
}
override def draw()
{
println(s"Line:(${startPoint.x},${startPoint.y})--(${x2.x},${x2.y})")
} } class Circle(center:Point,var radius:Double) extends Shape(center)
{
override def draw()
{
println(s"Circle center:(${startPoint.x},${startPoint.y}),R=$radius")
}
override def zoom(num:Double)
{
radius*=num;
}
}

运行截图:

实验3, 统计学生成绩

object Count {
def main(args: Array[String]): Unit = { // 假设数据文件在当前目录下
val inputFile = scala.io.Source.fromFile("test.txt")
//”\\s+“是字符串正则表达式,将每行按空白字符(包括空格/制表符)分开
// 由于可能涉及多次遍历,同 toList 将 Iterator 装为 List
// originalData 的类型为 List[Array[String]]
val originalData =inputFile.getLines.map{_.split("\\s+")} .toList
val courseNames = originalData.head.drop(2) //获取第一行中的课程名
val allStudents = originalData.tail // 去除第一行剩下的数据
val courseNum = courseNames.length
// 统计函数,参数为需要常用统计的行
//用到了外部变量 courseNum,属于闭包函数
def statistc(lines:List[Array[String]])= {
// for 推导式,对每门课程生成一个三元组,分别表示总分,最低分和最高分
(for(i<- 2 to courseNum+1) yield {
// 取出需要统计的列
val temp = lines map {elem=>elem(i).toDouble}
(temp.sum,temp.min,temp.max)
}) map {case (total,min,max) => (total/lines.length,min,max)
} // 最后一个 map 对 for 的结果进行修改,将总分转为平均分
}
// 输出结果函数
def printResult(theresult:Seq[(Double,Double,Double)]){
// 遍历前调用 zip 方法将课程名容器和结果容器合并,合并结果为二元组容器
(courseNames zip theresult) foreach {
case (course,result)=>
println(f"${course+":"}%-10s${result._1}%5.2f${result._2}%8.2f${r
esult._3}%8.2f")
} }
// 分别调用两个函数统计全体学生并输出结果
val allResult = statistc(allStudents)
println("course average min max")
printResult(allResult) //按性别划分为两个容器
val (maleLines,femaleLines) = allStudents partition
{_(1)=="male"}
// 分别调用两个函数统计男学生并输出结果
val maleResult = statistc(maleLines)
println("course average min max")
printResult(maleResult)
// 分别调用两个函数统计男学生并输出结果
val femaleResult = statistc(femaleLines)
println("course average min max")
printResult(femaleResult)
}
}

spark实验(二)--scala实验(3)的更多相关文章

  1. spark实验(二)--scala安装(1)

    一.实验目的 (1)掌握在 Linux 虚拟机中安装 Hadoop 和 Spark 的方法: (2)熟悉 HDFS 的基本使用方法: (3)掌握使用 Spark 访问本地文件和 HDFS 文件的方法. ...

  2. 云计算实验二 Docker实验-docker安装

    一.实验目的  1.了解Docker服务安装: 2.掌握Docker镜像操作 二.实验内容 1.Docker服务安装 查看内核版本 uname -r 安装依赖环境: yum install -y yu ...

  3. 在Spark上用Scala实验梯度下降算法

    首先参考的是这篇文章:http://blog.csdn.net/sadfasdgaaaasdfa/article/details/45970185 但是其中的函数太老了.所以要改.另外出发点是我自己的 ...

  4. 云计算实验二 Docker实验-mysql、tomcat、sqlserver、redis、oracle、mongo安装

    mysql安装 下载镜像 docker pull mysql 查看镜像 docker images|grep mysql 创建启动容器 docker run --name mysqlserver -v ...

  5. FPGA与simulink联合实时环路系列——实验二LED

    实验二LED 实验内容 在实验一的基础上,将simulink产生的测试信号输出到FPGA开发板上的LED灯进行显示,这里要在生成的硬件模型上进行修改,将传送到FPGA的信号输出到8个LED灯上,并且对 ...

  6. 20145301&20145321&20145335实验二

    20145301&20145321&20145335实验二 这次实验我的组员为:20145301赵嘉鑫.20145321曾子誉.20145335郝昊 实验内容详见:实验二

  7. 20175325 《JAVA程序设计》实验二《JAVA开发环境的熟悉》实验报告

    20175325 <JAVA程序设计>实验二<JAVA开发环境的熟悉>实验报告 一.实验报告封面 课程:Java程序设计 班级:1753班 姓名:石淦铭 学号:20175325 ...

  8. 2017-2018-2 20165313实验二《Java面向对象程序设计》

    实验报告封面 实验内容及步骤 实验一 1.试验要求: 参考 (http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST) 完成单元测试的学习. ...

  9. 20172304 实验二 《Java面向对象程序设计》 实验报告

    20172304 实验二 <Java面向对象程序设计> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1723班 学生姓名:段志轩 学生学号:20172304 实验时间 ...

随机推荐

  1. array.find()方法

    //array.find(function(currentValue, index, arr),thisValue) 方法说明 let tempArray = [ {"key":1 ...

  2. mysql 同时支持多少连接MYSQL 查看最大连接数和修改最大连接数

    MySQL查看最大连接数和修改最大连接数 1.查看最大连接数 show variables like '%max_connections%'; 2.修改最大连接数 set GLOBAL max_con ...

  3. MySQL导入含有中文字段(内容)CSV文件乱码解决方法

    特别的注意:一般的CSV文件并不是UTF-8编码,而是10008(MAC-Simplified Chinese GB 2312),所以再通过Navicat导入数据的时候需要指定的编码格式是10008( ...

  4. 剑指offer 面试题35.复杂链表的复制

    时间O(N),空间O(N) /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomList ...

  5. Django Auth组件->扩展用户

    Auth用户 1.声明用户表 djangauth/settings.py..............................AUTH_USER_MODEL = 'app01.UserInfo' ...

  6. CentOS7 卸载Firefox

    先进入管理员模式 执行: yum remove firefox 然后用whereis 查看,却发现还是有: [root@localhost ~]# whereis firefox firefox: / ...

  7. Django之form表单操作

    小白必会三板斧 from django.shortcuts import render,HttpResponse,redirect HttpRespone:返回字符串 render:返回html页面 ...

  8. AD 快捷键设置

    TAA 设置自动标记原件位号 AR 设置元件向右对齐 AL 设置元件向左对齐 MS 移动所选择 CO 错误报告设置 CTRL + w 设置电气线 PN 添加net label TG 打开封装管理器 P ...

  9. 【游戏体验】Haunted House(鬼屋历险记)

    >>>点此处可试玩无敌版<<< 这款游戏可谓是经典,很多人的童年都有过它的陪伴,不妨重拾当年的快乐 个人测评 游戏性 9/10 音乐 7/10 剧情 4/10 总评 ...

  10. 解决laravel出现Syntax error or access violation: 1055 '***' isn't in GROUP BY

    laravel 5.3 以后默认开启 mysql严格模式(strict)在mysql在严格模式下, 并且开启了ONLY_FULL_GROUP_BY的情况下,group by 的字段没有出现在 sele ...