实验 2 Scala 编程初级实践

news/2026/1/20 20:49:17/文章来源:https://www.cnblogs.com/abc233/p/19508781

image

// 在 spark-shell 提示符下直接粘贴即可
import scala.io.StdInval q = StdIn.readLine("请输入 q: ").trim.toDoublevar n   = 1
var sn  = 0.0
var term = 0.0while (sn < q) {term = (n + 1).toDouble / nsn  += termn   += 1
}println(f"Sn=$sn%.6f")

image

// ========= 1. 基础定义(题目已给出,顺手修掉笔误) =========
case class Point(var x: Double, var y: Double) extends Drawable {def shift(deltaX: Double, deltaY: Double): Unit = { x += deltaX; y += deltaY }override def toString: String = s"($x,$y)"
}trait Drawable {def draw(): Unit = println(this.toString)
}// ========= 2. 抽象基类 =========
abstract class Shape(var pos: Point) extends Drawable {def moveTo(newPos: Point): Unit = { pos = newPos }def zoom(factor: Double): Unit
}// ========= 3. 直线 =========
class Line(var p1: Point, var p2: Point) extends Shape(p1) with Drawable {/* 中点 */private def mid: Point =Point((p1.x + p2.x) / 2, (p1.y + p2.y) / 2)/* 以中点为基准缩放 factor 倍 */override def zoom(factor: Double): Unit = {val m = midp1.x = m.x + (p1.x - m.x) * factorp1.y = m.y + (p1.y - m.y) * factorp2.x = m.x + (p2.x - m.x) * factorp2.y = m.y + (p2.y - m.y) * factor}/* 移动:保持向量不变,整体平移 */override def moveTo(newPos: Point): Unit = {val dx = newPos.x - p1.xval dy = newPos.y - p1.yp1.shift(dx, dy)p2.shift(dx, dy)}override def toString: String = s"Line: $p1--$p2"override def draw(): Unit = println(toString)
}// ========= 4. 圆 =========
class Circle(center: Point, var radius: Double)extends Shape(center) with Drawable {override def zoom(factor: Double): Unit = radius *= factoroverride def toString: String = s"Circle center: $pos,R=$radius"override def draw(): Unit = println(toString)
}// ========= 5. 入口 =========
object MyDraw {def main(args: Array[String]): Unit = {val p = new Point(10, 30)p.drawval line1 = new Line(Point(0, 0), Point(20, 20))line1.drawline1.moveTo(Point(5, 5))line1.drawline1.zoom(2)line1.drawval cir = new Circle(Point(10, 10), 5)cir.drawcir.moveTo(Point(30, 20))cir.drawcir.zoom(0.5)cir.draw}
}// ========= 6. 在 spark-shell 里跑起来 =========
MyDraw.main(Array.empty)

image

object GradeStatistics {private case class Student(id: String, gender: String, scores: Map[String, Double])// 从字符串解析数据private def parseData(data: String): (List[Student], List[String]) = {val lines = data.linesIterator.map(_.trim).filter(_.nonEmpty).toListif (lines.length < 2) return (Nil, Nil)// 解析表头val header = lines.head.split("\\s+").toListval courses = header.drop(2)// 解析学生数据val students = lines.tail.map { line =>val fields = line.split("\\s+")val id = fields(0)val gender = fields(1)val scores = (courses zip fields.drop(2).map(_.toDouble)).toMapStudent(id, gender, scores)}(students, courses)}// 统计单个组private def calculateStats(students: List[Student], courses: List[String]):Map[String, (Double, Double, Double)] = {courses.map { course =>val scores = students.map(_.scores(course))val avg = scores.sum / scores.sizeval min = scores.minval max = scores.maxcourse -> (avg, min, max)}.toMap}// 打印统计结果private def printStats(title: String, stats: Map[String, (Double, Double, Double)]): Unit = {println(title)println("course    average   min   max")stats.foreach { case (course, (avg, min, max)) =>println(f"$course:     $avg%5.2f   $min%5.2f   $max%5.2f")}println()}// 主处理函数def analyze(data: String): Unit = {val (students, courses) = parseData(data)if (students.isEmpty) {println("没有学生数据")return}println(s"共读取 ${students.size} 名学生数据")println(s"课程:${courses.mkString(", ")}")println("-" * 40)// 所有学生统计val overallStats = calculateStats(students, courses)printStats("所有学生成绩统计:", overallStats)// 男生统计val maleStats = calculateStats(students.filter(_.gender == "male"), courses)printStats("男生成绩统计:", maleStats)// 女生统计val femaleStats = calculateStats(students.filter(_.gender == "female"), courses)printStats("女生成绩统计:", femaleStats)}
}// 测试主程序
object Test {def main(args: Array[String]): Unit = {println("=== 学生成绩统计分析 ===\n")// 测试样例1println("测试样例1:")val data1 ="""Id  gender  Math    English   Physics|301610    male   80      64        78|301611  female   65      87        58|301612  female   44      71        77|301613  female   66      71        91|301614  female   70      71       100|301615    male   72      77        72|301616  female   73      81        75|301617  female   69      77        75|301618    male   73      61        65|301619    male   74      69        68|301620    male   76      62        76|301621    male   73      69        91|301622    male   55      69        61|301623    male   50      58        75|301624  female   63      83        93|301625    male   72      54       100|301626    male   76      66        73|301627    male   82      87        79|301628  female   62      80        54|301629    male   89      77        72""".stripMarginGradeStatistics.analyze(data1)println("=" * 60)// 测试样例2println("测试样例2:")val data2 ="""Id  gender  Math    English   Physics  Science|301610    male   72   39     74   93|301611    male   75   85     93   26|301612  female   85   79     91   57|301613  female   63   89     61   62|301614    male   72   63     58   64|301615    male   99   82     70   31|301616  female  100   81     63   72|301617    male   74  100     81   59|301618  female   68   72     63  100|301619    male   63   39     59   87|301620  female   84   88     48   48|301621    male   71   88     92   46|301622    male   82   49     66   78|301623    male   63   80     83   88|301624  female   86   80     56   69|301625    male   76   69     86   49|301626    male   91   59     93   51|301627  female   92   76     79  100|301628    male   79   89     78   57|301629    male   85   74     78   80""".stripMarginGradeStatistics.analyze(data2)}
}

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

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

相关文章

【收藏必备】Transformer架构深度解析:一文掌握大模型核心原理

Transformer通过自注意力(QKV)和多头注意力机制实现高效长距离依赖捕捉&#xff0c;结合残差连接和层归一化保障训练稳定性&#xff0c;彻底解决传统RNN/CNN的顺序处理限制&#xff0c;实现并行计算&#xff0c;成为大模型的核心架构。本文系统解析其组件和工作原理&#xff0c…

解锁AI生产力新境界:Coze平台200+工作流合集深度解析与实战指南

摘要&#xff1a;本文开源分享了一套覆盖200实用场景的Coze工作流合集&#xff0c;从项目背景、技术价值到详细操作指南&#xff0c;系统性解析如何通过标准化工作流实现AI任务自动化。通过Git克隆或ZIP下载两种方式&#xff0c;读者可快速获取并导入工作流至Coze平台&#xff…

paperxie 毕业论文写作工具:本科生通关毕业季的秘密武器

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 毕业季的钟声已经敲响&#xff0c;当你还在为本科毕业论文焦头烂额时&…

人群仿真软件:Legion_(5).Legion建模工具使用

Legion建模工具使用 1. 建模工具概述 Legion建模工具是Legion软件的核心组成部分之一&#xff0c;用于创建和编辑人群仿真模型。该工具提供了丰富的功能和工具集&#xff0c;使得用户能够高效地构建复杂的仿真环境。建模工具的主要功能包括&#xff1a;几何建模&#xff1a;创建…

救命神器8个AI论文网站,继续教育学生轻松搞定毕业论文!

救命神器8个AI论文网站&#xff0c;继续教育学生轻松搞定毕业论文&#xff01; AI 工具如何助力论文写作&#xff1f; 在当今快节奏的学习环境中&#xff0c;继续教育学生面临着越来越大的学术压力&#xff0c;尤其是毕业论文的撰写。传统的写作方式不仅耗时耗力&#xff0c;还…

Python语法进阶笔记(五)

一、可迭代对象可迭代对象Iterable遍历&#xff08;迭代&#xff09;&#xff1a;依次从对象中把一个个元素取出来的过程数据类型&#xff1a;str、list、tuple、dict、set等可迭代对象的条件对象实现了_ _ iter _ _ () 方法_ _iter _ _() 返回了迭代器对象for 循环工作原理先通…

第二篇冲刺博客

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience/homework/13474第2天敏捷冲刺日…

Python语法进阶笔记(五)

一、可迭代对象可迭代对象Iterable遍历&#xff08;迭代&#xff09;&#xff1a;依次从对象中把一个个元素取出来的过程数据类型&#xff1a;str、list、tuple、dict、set等可迭代对象的条件对象实现了_ _ iter _ _ () 方法_ _iter _ _() 返回了迭代器对象for 循环工作原理先通…

struts2 命令执行 (CVE-2016-3081)

直接使用工具跑存在漏洞,直接执行命令

paperxie 毕业论文:硕士专属智能写作工具,30000 字高质论文轻松交付

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 在硕士生涯的后半程&#xff0c;毕业论文的写作压力几乎是每个学子都要…

人群仿真软件:Legion_(2).Legion软件安装与配置

Legion软件安装与配置 前言 在进行人群仿真分析之前&#xff0c;首先需要安装和配置Legion软件。本节将详细介绍Legion软件的安装步骤和配置方法&#xff0c;确保用户能够在自己的计算机上顺利运行Legion仿真软件。 1. 系统要求 在安装Legion软件之前&#xff0c;确保您的计…

1.20 2026多校冲刺省选模拟赛3题解

2026多校冲刺省选模拟赛3题解2026多校冲刺省选模拟赛3题解 感觉这场比赛稍微有点体验感,除了T1没有m? T2放科技? 但是我打的很烂,预计打了 40 + 65 + 70 实际只有 0 + 45 + 70,感觉T1是个水题但是没有切掉,T3考场…

几类高质量的开源 3D 控件/库推荐:

1. Web 前端与可视化(JavaScript/TypeScript)如果你是在网页端开发,无论是数据大屏还是数字孪生项目,这些库是目前的“顶流”。Three.js 🌐定位:Web 3D 开发的“标准库”。特点:基于 WebGL,拥有极其庞大的社区…

人群仿真软件:Legion_(4).Legion用户界面介绍

Legion用户界面介绍 1. 用户界面概述 Legion是一款专业的人群仿真软件&#xff0c;用户界面设计简洁、直观&#xff0c;旨在为用户提供高效、易用的仿真环境。本节将详细介绍Legion用户界面的主要组成部分及其功能&#xff0c;帮助用户快速上手并进行人群仿真。 1.1 主窗口 主窗…

为什么在 Windows 的运行对话框(Win + r)里输入 code 会打开 VSCode ???

我原本是用文件夹里保存 shortcut 的方式快速打开一些东西的 但是这台电脑是新装的,很多东西只是按照老电脑复原了一下,并没有仔细检查 刚刚才发现输入 code 并没有弹出我的代码文件夹 而是直接启动了VSCode,并且打…

科研党效率革命:paperxie 科研绘图,让数据变成高分论文的视觉密码

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/drawinghttps://www.paperxie.cn/drawinghttps://www.paperxie.cn/drawing 在科研论文的世界里&#xff0c;一张精准、专业的图表&#xff0c;往往比千言万语更有说服力。但…

【图像加密】基于差分扩展的缩略图保持加密技术附matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。&#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知。&#x1f525; 内容介绍在数字化浪潮的席卷下&#xff0c;数…

6款写论文AI工具测评:AI智能润色+提升学术原创性,高效搞定论文写作! - 麟书学长

还在为论文写作焦虑?AI工具可助效率提升十倍!本文深度测评6款顶尖AI论文写作工具,含PaperFine、TXYZ等,覆盖从选题到定稿全流程。以功能全面的PaperFine为例,详解从创建项目、生成大纲、智能撰写、问卷处理到降重…

从选题到定稿:paperxie 毕业论文工具如何让本科毕业不再 “渡劫”

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 又到毕业季&#xff0c;朋友圈里一半是旅行打卡的狂欢&#xff0c;一半…