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"))

   }

   

}

 

更多推荐