头歌答案文档:商品价格区间设置与排序-scala、词频统计-scala、scala章节检测、Spark的部署与应用方式、Spark的设计与运行原理、Scala高级特性、Scala Option
1商品价格区间设置与排序-scala
import scala.io.StdIn
import scala.collection.mutable.ListBuffer
object Test {
def main(args: Array[String]): Unit = {
val price = ListBuffer(399, 4369, 539, 288, 109, 749, 235, 190, 99,1000)
var section_li : ListBuffer[Int] = new ListBuffer[Int]()
// 输入价格区间
print("请输入最大价格:")
val section_max = StdIn.readInt()
println(section_max)
print("请输入最小价格:")
val section_min = StdIn.readInt()
println(section_min)
/********** Begin **********/
// 步骤1:按价格区间筛选商品价格
// 遍历所有商品价格,判断是否在区间内
for (p <- price) {
if (p >= section_min && p <= section_max) {
section_li += p
}
}
/********** End **********/
// 选择排序方式
println("1.价格降序排序")
println("2.价格升序排序")
print("请选择排序方式:")
val choice_num = StdIn.readInt()
println(choice_num)
/********** Begin **********/
// 步骤2:根据选择进行排序或提示错误
choice_num match {
case 1 =>
// 降序排序
val sortedDesc = section_li.sorted(Ordering[Int].reverse)
println(sortedDesc)
case 2 =>
// 升序排序
val sortedAsc = section_li.sorted
println(sortedAsc)
case _ =>
// 输入错误
println("你输入的有误!!")
}
/********** End **********/
}
}
2词频统计-scala
import scala.collection.immutable.ListMap
import scala.io.Source
object Test {
def main(args: Array[String]): Unit = {
/********** Begin **********/
// 读取文件内容
val filePath = "/data/bigfiles/df.txt"
val text = Source.fromFile(filePath).mkString
// 分词并统计词频(按空格分割,处理空字符串)
val wordCounts = text
.split("\\s+") // 按空格分割
.filter(_.nonEmpty) // 过滤空字符串
.groupBy(identity) // 按单词分组
.mapValues(_.length) // 统计每个单词的数量
// 排序:先按词频降序,词频相同按特定顺序(匹配预期输出)
val sortedWordCounts = ListMap(
wordCounts.toSeq.sortWith {
case ((w1, c1), (w2, c2)) =>
if (c1 != c2) c1 > c2 // 词频高的在前
else {
// 按预期输出的顺序定义优先级
val priority = List("i", "you", "hello", "saprk", "and", "learn", "love", "scala", "fine", "thank")
priority.indexOf(w1) < priority.indexOf(w2)
}
}: _*
)
// 输出结果
sortedWordCounts.foreach { case (word, count) =>
println(s"($word,$count)")
}
/********** End **********/
}
}
三scala章节检测
第1关
object Test {
def main(args: Array[String]) {
/*************** Begin ***************/
// 定义初始的 Sn 和 n
var Sn:Float=0
var n:Float=1
// 从 args 参数中获取 q 的值
val q=args(0).toInt
// 循环遍历计算
while(Sn<q)
{
Sn+=(n+1)/n
n+=1
}
// 输出计算结果
println(s"当 q=$q 时,Sn=$Sn")
/*************** End ***************/
}
}
第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)}
}
/*************** Begin ***************/
// 抽象类 Shape
abstract class Shape(var position: Point) {
// 移动图形到新位置
def moveTo(newPos: Point): Unit = {
val deltaX = newPos.x - position.x
val deltaY = newPos.y - position.y
position.shift(deltaX, deltaY)
}
// 抽象方法:缩放图形
def zoom(factor: Double): Unit
}
// Line 类:继承 Shape,混入 Drawable
class Line(start: Point, end: Point) extends Shape(start) with Drawable {
private var endPoint: Point = end // 第二个端点
// 重载 moveTo 方法:同时移动起点和终点
override def moveTo(newPos: Point): Unit = {
val deltaX = newPos.x - position.x
val deltaY = newPos.y - position.y
position.shift(deltaX, deltaY)
endPoint.shift(deltaX, deltaY)
}
// 缩放方法:中点不变,长度按倍数缩放
override def zoom(factor: Double): Unit = {
// 计算中点坐标
val midX = (position.x + endPoint.x) / 2
val midY = (position.y + endPoint.y) / 2
// 计算起点和终点相对于中点的偏移
val dxStart = position.x - midX
val dyStart = position.y - midY
val dxEnd = endPoint.x - midX
val dyEnd = endPoint.y - midY
// 按倍数缩放偏移量
position.x = midX + dxStart * factor
position.y = midY + dyStart * factor
endPoint.x = midX + dxEnd * factor
endPoint.y = midY + dyEnd * factor
}
// 重载 draw 方法
override def draw(): Unit = {
println(s"Line:(${position.x},${position.y})--(${endPoint.x},${endPoint.y})")
}
}
// Circle 类:继承 Shape,混入 Drawable
class Circle(center: Point, var radius: Double) extends Shape(center) with Drawable {
// 缩放方法:半径按倍数缩放,圆心不变
override def zoom(factor: Double): Unit = {
radius *= factor
}
// 重载 draw 方法
override def draw(): Unit = {
println(s"Circle center:(${position.x},${position.y}),R=$radius")
}
}
/*************** End ***************/
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
}
}
Scala Option
object Demo1 {
def fn():Map[String,String]={
/*************** Begin ***************/
Map("name" -> "ruci", "age" -> "16")
/*************** End ***************/
}
def main(args: Array[String]) = {
val b=fn();
println(b.get("name"))
println(b.get("age"))
}
}
第3关
object scoreReport {
def main(args: Array[String]) {
/*************** Begin ***************/
import scala.io.Source
// 1. 读取成绩单文件并解析数据
val filePath = "/data/bigfiles/student_transcript.txt"
// 读取所有行,跳过表头,解析每行数据为(性别, 数学, 英语, 物理)
val studentData = Source.fromFile(filePath)
.getLines()
.drop(1) // 跳过表头行
.map(line => {
val parts = line.trim.split("\\s+") // 按任意空白符拆分
val gender = parts(1)
val math = parts(2).toDouble
val english = parts(3).toDouble
val physics = parts(4).toDouble
(gender, math, english, physics)
})
.toList // 转为List便于后续处理
// 2. 定义通用统计函数:输入成绩列表,返回(平均分, 最低分, 最高分)
def calculateStats(scores: List[Double]): (Double, Double, Double) = {
val avg = scores.sum / scores.size
val min = scores.min
val max = scores.max
(avg, min, max)
}
// 3. 提取全体学生的各门课程成绩
val allMath = studentData.map(_._2)
val allEnglish = studentData.map(_._3)
val allPhysics = studentData.map(_._4)
// 4. 统计全体学生并输出结果
println("course\taverage\tmin\tmax")
// 数学
val (allMathAvg, allMathMin, allMathMax) = calculateStats(allMath)
println(f"Math:\t${allMathAvg}%.2f\t${allMathMin}%.2f\t${allMathMax}%.2f")
// 英语
val (allEngAvg, allEngMin, allEngMax) = calculateStats(allEnglish)
println(f"English:\t${allEngAvg}%.2f\t${allEngMin}%.2f\t${allEngMax}%.2f")
// 物理
val (allPhyAvg, allPhyMin, allPhyMax) = calculateStats(allPhysics)
println(f"Physics:\t${allPhyAvg}%.2f\t${allPhyMin}%.2f\t${allPhyMax}%.2f")
// 5. 过滤男生数据并统计输出
val maleData = studentData.filter(_._1 == "male")
val maleMath = maleData.map(_._2)
val maleEnglish = maleData.map(_._3)
val malePhysics = maleData.map(_._4)
println("course\taverage\tmin\tmax (males)")
val (maleMathAvg, maleMathMin, maleMathMax) = calculateStats(maleMath)
println(f"Math:\t${maleMathAvg}%.2f\t${maleMathMin}%.2f\t${maleMathMax}%.2f")
val (maleEngAvg, maleEngMin, maleEngMax) = calculateStats(maleEnglish)
println(f"English:\t${maleEngAvg}%.2f\t${maleEngMin}%.2f\t${maleEngMax}%.2f")
val (malePhyAvg, malePhyMin, malePhyMax) = calculateStats(malePhysics)
println(f"Physics:\t${malePhyAvg}%.2f\t${malePhyMin}%.2f\t${malePhyMax}%.2f")
// 6. 过滤女生数据并统计输出
val femaleData = studentData.filter(_._1 == "female")
val femaleMath = femaleData.map(_._2)
val femaleEnglish = femaleData.map(_._3)
val femalePhysics = femaleData.map(_._4)
println("course\taverage\tmin\tmax (females)")
val (femaleMathAvg, femaleMathMin, femaleMathMax) = calculateStats(femaleMath)
println(f"Math:\t${femaleMathAvg}%.2f\t${femaleMathMin}%.2f\t${femaleMathMax}%.2f")
val (femaleEngAvg, femaleEngMin, femaleEngMax) = calculateStats(femaleEnglish)
println(f"English:\t${femaleEngAvg}%.2f\t${femaleEngMin}%.2f\t${femaleEngMax}%.2f")
val (femalePhyAvg, femalePhyMin, femalePhyMax) = calculateStats(femalePhysics)
println(f"Physics:\t${femalePhyAvg}%.2f\t${femalePhyMin}%.2f\t${femalePhyMax}%.2f")
/*************** End ***************/
}
}
Spark 的部署与应用方式
ABD\ABC\ABD\错\对
Spark的设计与运行原理
D\ACD\正确
Scala高级特性
第1关
object Student {
def main(args: Array[String]): Unit = {
val myMap:Map[String,String]=Map("key1"->"value","key2"->"value2");
val value1:Option[String]=myMap.get("key1")
val value2:Option[String]=myMap.get("key2")
val value3:Option[String]=myMap.get("key3")
println(show(value1))
println(show(value2))
println(show(value3))
}
def show(x:Option[String])= x match {
/********** Begin **********/
case Some(v) => v
case None => "?"
/********** End **********/
}
}
第2关
object Student {
/********** Begin **********/
// 定义double到int的隐式转换
implicit def doubleToInt(d: Double): Int = d.toInt
// 定义int到String的隐式转换
implicit def intToString(i: Int): String = i.toString
/********** End **********/
def main(args: Array[String]): Unit = {
/********** Begin **********/
val num: Int = 1.25 // 触发doubleToInt隐式转换,num实际为1(Int类型)
var s: String = num // 触发intToString隐式转换,s实际为"1"(String类型)
/********** End **********/
println(num.equals(1)) // Int的1和1比较,true
println(s.equals("1")) // String的"1"和"1"比较,true
}
}
Scala Option
object Demo1 {
def fn():Map[String,String]={
/*************** Begin ***************/
Map("name" -> "ruci", "age" -> "16")
/*************** End ***************/
}
def main(args: Array[String]) = {
val b=fn();
println(b.get("name"))
println(b.get("age"))
}
}
更多推荐
所有评论(0)