• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Scala 编程题三

武飞扬头像
lambda-小张
帮助1

还有系列的和Scala编程题二

1.编写一个简单程序,要求数组长度为5,分别赋值10,20,30,40,50,在控制台输出该数组的值。

代码:

  1.  
    object ArrayTest {
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val arr =new Array[Int](5)
  4.  
    for(x <- 1 to 5){
  5.  
    arr(x-1) = x*10
  6.  
    }
  7.  
    val arrayBuffer = arr.toBuffer//定长改成变长
  8.  
    arrayBuffer.foreach(print(_))
  9.  
    }
  10.  
     
  11.  
    }

运行结果:

1020304050

2.将一个字符数组的值拷贝到另一个字符数组中.

代码:

  1.  
    object ArrayTest2{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val a=Array('a','b','c')
  4.  
    val b:Array[Char]=new Array(3) //表示3个元素的位置
  5.  
    a.copyToArray(b) //直接拷贝a到b数组
  6.  
    println(b.mkString(","))
  7.  
     
  8.  
    }
  9.  
    }

运行结果:

a,b,c

3.给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组,先排序,然后输出排序后的数组的值。

代码:

  1.  
    object ArrayTest3{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    var num = ArrayBuffer(1,6,2,3,9,4,5,7,8)
  4.  
    num= num.sorted
  5.  
    println(num)
  6.  
    }
  7.  
    }

运行结果:

ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)

4.输出一个double型二维数组(长度分别为5、4,值自己设定)的值。

代码:

  1.  
    object ArrayTest4{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val arr = Array.ofDim[Double](5, 4)
  4.  
    for(x <- 0 to arr.length-1){
  5.  
    for(y <- 0 to arr(x).length-1){
  6.  
    arr(x)(y) = y
  7.  
    }
  8.  
    }
  9.  
    for(x <- 0 to arr.length-1){
  10.  
    for(y <- 0 to arr(x).length-1){
  11.  
    print(arr(x)(y) " ")
  12.  
    }
  13.  
    println()
  14.  
    }
  15.  
     
  16.  
    }
  17.  
    }
学新通

运行结果:

  1.  
    0.0 1.0 2.0 3.0
  2.  
    0.0 1.0 2.0 3.0
  3.  
    0.0 1.0 2.0 3.0
  4.  
    0.0 1.0 2.0 3.0

5.在一个有8个整数(18,25,7,36,13,2,89,63)的数组中找出其中最大的数及其下标。

代码:

  1.  
    object ArrayTest5{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val arr = ArrayBuffer(18,25,7,36,13,2,89,63)
  4.  
    println(arr.max)
  5.  
    println(arr.indexOf(arr.max))
  6.  
    }
  7.  
    }

运行结果:

  1.  
    89
  2.  
    6

6.将一个数组中的元素逆序存放

代码:

  1.  
    object ArrayTest6{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val arr = ArrayBuffer(18,25,7,36,13,2,89,63)
  4.  
    print(arr.reverse)
  5.  
    }
  6.  
    }

运行结果:

ArrayBuffer(63, 89, 2, 13, 36, 7, 25, 18)

7.将一个数组中的重复元素保留一个其他的清零。

代码:

  1.  
    object ArrayTest7_1{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val num = ArrayBuffer(18,25,18,36,13,2,89,63,63)
  4.  
    print(num.distinct)
  5.  
    }
  6.  
    }

运行结果:

ArrayBuffer(18, 25, 36, 13, 2, 89, 63)

8.给定一维数组{ -10,2,3,246,-100,0,5} ,计算出数组中的平均值、最大值、最小值。

代码:

  1.  
    object ArrayTest8{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val num = ArrayBuffer(-10,2,3,246,-100,0,5)
  4.  
    println(num.max)
  5.  
    println(num.min)
  6.  
    val num2=num.sum/num.length
  7.  
    println(num2)
  8.  
    }
  9.  
    }

运行结果:

  1.  
    246
  2.  
    -100
  3.  
    20

9.生成10个1至100之间的随机整数(不能重复),存入一个List集合然后进行排序。

代码:

  1.  
    object ListTest {
  2.  
    def main(args: Array[String]): Unit = {
  3.  
     
  4.  
    var a = ListBuffer[Int]()
  5.  
    while(a.length<10){
  6.  
    a = Random.nextInt(100)
  7.  
    a=a.distinct.sorted
  8.  
    }
  9.  
    println(a ",")
  10.  
     
  11.  
    }
  12.  
    }

运行结果:

ListBuffer(8, 12, 18, 32, 54, 55, 57, 68, 90, 96)

10.定义List集合,添加包含三个连续的"def",删除集合中字符串"def"。

代码:

  1.  
    object ListTest2 {
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val list = ListBuffer("def","1","fff")
  4.  
    val list2 = ListBuffer.fill(3)("def")
  5.  
    list = list2
  6.  
    println(list)
  7.  
    for(x <- list){
  8.  
    if(x.equals("def")){
  9.  
    list -= x
  10.  
    }
  11.  
    }
  12.  
    print(list)
  13.  
    }
  14.  
    }

运行结果:

  1.  
    ListBuffer(def, 1, fff, def, def, def)
  2.  
    ListBuffer(1, fff)

11.定义List集合,存入多个字符串,删除集合中包含0-9数字的字符串(只要字符串中包含0-9中的任意一个数字就需要删除此整个字符串)

代码:

  1.  
    object ListTest3{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val list = ListBuffer("a","a0","b","b1","c","9","d","d9")
  4.  
    for(x <- list){
  5.  
    for(y <- 0 to 9){
  6.  
    if(x.contains(y.toString)){
  7.  
    list -=x
  8.  
    }
  9.  
    }
  10.  
    }
  11.  
    print(list)
  12.  
    }
  13.  
    }

运行结果:

ListBuffer(a, b, c, d)

12.创建一个List,在List中增加三个工人,基本信息如下:(工人信息用元组存放)姓名年龄工资 在李四之前插入一个工人,信息为:姓名:赵六,年龄:24,工资3300 删除王五信息 利用for循环遍历,打印List中所有工人的信息

代码:

  1.  
    object ListTest4{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val worker = ListBuffer(("张三",18,3000),("李四",25,3500),("王五",22,3200))
  4.  
    worker.insert(worker.indexOf(("李四",25,3500)),("赵六",24,3300))
  5.  
    worker-=(("王五",22,3200))
  6.  
    worker.foreach(print(_))
  7.  
    }
  8.  
    }

运行结果:

(张三,18,3000)(赵六,24,3300)(李四,25,3500)

13.

  • 1.创建一个List val list0 = List(1,5,8,9,6,3,10,4,8,8,6,4,2,4,4,6,0) 
  • 2.将 list0 中每个元素乘以 10 后生成一个新的集合
  •  3.将list0 中的偶数取出来生成一个新的集合
  •  4.将list0 排序后生成一个新的集合
  •  5.反转顺序
  • 6.将list0 中的元素 4 个一组
  • 7.将 Iterator 转换成List
  • 8.将多个list 压扁成一个

代码:

  1.  
    object ListTest1 {
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val list = ListBuffer(1,5,8,9,6,3,10,4,8,8,6,4,2,4,4,6,0)
  4.  
    val list1 = list.map(_*10)
  5.  
    val list2 = list1.filter(_%2 == 0)
  6.  
    val list3 = list2.sorted
  7.  
    val list4 = list3.reverse
  8.  
    val list5 = list4.grouped(4).toList
  9.  
    val list6 = list5.flatten
  10.  
    print(list6)
  11.  
    }
  12.  
     
  13.  
    }

运行结果:

List(100, 90, 80, 80, 80, 60, 60, 60, 50, 40, 40, 40, 40, 30, 20, 10, 0)

14."hell tom hello jerry","hello jerry","hello kitty"先按空格拆分,在压平 。统计单词出现的频次

代码:

  1.  
    object ListTest2 {
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val list= List("hell tom hello jerry","hello jerry","hello kitty")
  4.  
    val list2 =list.flatMap(_.split(" "))
  5.  
    val result = list2.map((_,1)).groupBy(_._1).mapValues(_.length).toList.sortBy(_._2);
  6.  
    print(result)
  7.  
    }
  8.  
    }

运行结果:

List((kitty,1), (hell,1), (tom,1), (jerry,2), (hello,3))

15.并集,交集,差集

代码:

  1.  
    object ListTest3{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val list = List(5,6,4,7)
  4.  
    val list2 = List(1,2,3,4)
  5.  
    println(list.union(list2))//并集
  6.  
    println(list.intersect(list2))//交集
  7.  
    println(list.diff(list2))//差集
  8.  
    println(list2.diff(list))
  9.  
     
  10.  
    }
  11.  
    }

运行结果:

  1.  
    List(5, 6, 4, 7, 1, 2, 3, 4)
  2.  
    List(4)
  3.  
    List(5, 6, 7)
  4.  
    List(1, 2, 3)

16.题目如下:

本数据包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
……
请根据给定的实验数据,在scala中通过编程来计算以下内容:
(1)该系总共有多少学生;
(2)该系共开设了多少门课程;
(3)Tom同学的总成绩平均分是多少;
(4)求每名同学的选修的课程门数;
(5)该系DataBase课程共有多少人选修;
(6)各门课程的平均分是多少;

代码:

  1.  
    object CourseTest{
  2.  
    def main(args: Array[String]): Unit = {
  3.  
    val list= ListBuffer(
  4.  
    ("Tom","DataBase",80),
  5.  
    ("Tom","Algorithm",50),
  6.  
    ("Tom","DataStructure",60),
  7.  
    ("Jim","DataBase",90),
  8.  
    ("Jim","Algorithm",60),
  9.  
    ("Jim","DataStructure",80))
  10.  
    /**1)该系总共有多少学生;*/
  11.  
    val people = scala.collection.mutable.Set[String]()
  12.  
    for(x <- list){
  13.  
    people = x._1
  14.  
    }
  15.  
    println(people.size)
  16.  
     
  17.  
    /**2)该系共开设了多少门课程;*/
  18.  
    val course = scala.collection.mutable.Set[String]()
  19.  
    for(x <- list){
  20.  
    course = x._2
  21.  
    }
  22.  
    println(course.size)
  23.  
     
  24.  
    /**3)Tom同学的总成绩平均分是多少;*/
  25.  
    var sum =0
  26.  
    var count = 0
  27.  
    val course2 = scala.collection.mutable.Set[String]()
  28.  
    for(x <- list){
  29.  
    if(x._1.equals("Tom")){
  30.  
    sum = x._3
  31.  
    count = 1
  32.  
    }
  33.  
    }
  34.  
    println(sum/count)
  35.  
     
  36.  
    /**4)求每名同学的选修的课程门数;*/
  37.  
    var map = scala.collection.mutable.Map[String,Int]()
  38.  
    for(x<- list){
  39.  
    var name=x._1
  40.  
    if(map.contains(name)){
  41.  
    map(name) = 1
  42.  
    }else{
  43.  
    map = (name ->1)
  44.  
    }
  45.  
    }
  46.  
    println(map)
  47.  
     
  48.  
     
  49.  
    /**5)该系DataBase课程共有多少人选修;*/
  50.  
    var count2 =0
  51.  
    for(x<- list){
  52.  
    if(x._2.equals("DataBase")){
  53.  
    count2 = 1
  54.  
    }
  55.  
    }
  56.  
    println(count2)
  57.  
     
  58.  
    /**6)各门课程的平均分是多少;*/
  59.  
    var avg =list.groupBy(_._2)
  60.  
    for(a<-avg){
  61.  
    var sum =0
  62.  
    var size=0
  63.  
    for(b<-a._2){
  64.  
    sum =b._3
  65.  
    size =1
  66.  
    }
  67.  
    println(s"${a._1}的平均分是${sum/size}")
  68.  
     
  69.  
    }
  70.  
     
  71.  
    }
  72.  
    }
学新通

  运行结果:

  1.  
    2
  2.  
    3
  3.  
    63
  4.  
    HashMap(Tom -> 3, Jim -> 3)
  5.  
    2
  6.  
    DataStructure的平均分是70
  7.  
    DataBase的平均分是85
  8.  
    Algorithm的平均分是55

17..题目如下:

定义一个ListBuffer(("张三",'男',18),("李四",'女',20),("王五",'女',21),("赵六",'男',22),("田七",'女',17),("王伟",'男',20))
  1、把每个人的年龄改成之前的3倍
  2、把每个人的年龄改成之前的2倍,之后再这个基础上进行减一
  3、年龄小于20的过滤掉
  4、性别是女的过滤掉
  5、计算一下所有人的总年龄
  6、请按照年龄从小到大排序
  7、请按照年龄从大到小排序
  8、把每个人的姓名性别年龄合成一个输出
  9、把年龄为奇数和偶数的人分开

代码:

  1.  
    package mx2.Demo.work
  2.  
     
  3.  
    import scala.collection.mutable.ListBuffer
  4.  
     
  5.  
    object Test5 {
  6.  
    def main(args: Array[String]): Unit = {
  7.  
     
  8.  
    var list = ListBuffer(("张三",'男',18),("李四",'女',20),("王五",'女',21),("赵六",'男',22),("田七",'女',17),("王伟",'男',20))
  9.  
    //1、把每个人的年龄改成之前的3
  10.  
    var list1 = list.map(a =>ListBuffer(a._1,a._2,a._3*3))
  11.  
    println(list1)
  12.  
     
  13.  
    //2、把每个人的年龄改成之前的2倍,之后再这个基础上进行减一
  14.  
    var list2 = list.map(a => ListBuffer(a._1,a._2,a._3*3-1))
  15.  
    println(list2)
  16.  
     
  17.  
    //3、年龄小于20的过滤掉
  18.  
    var list3 = list.filter(a => if(a._3 <20)false else true)
  19.  
    println(list3)
  20.  
     
  21.  
    //4、性别是女的过滤掉
  22.  
    var list4 = list.filter(a => if(a._2 =='女')false else true)
  23.  
    println(list4)
  24.  
     
  25.  
    //5、计算一下所有人的总年龄
  26.  
    var list5 = list.map(a => a._3).reduce((a,b)=>a b)
  27.  
    println(list5)
  28.  
     
  29.  
    //6、请按照年龄从小到大排序
  30.  
    list.sortBy(a => a._3).foreach(println)
  31.  
     
  32.  
    //7、请按照年龄从大到小排序
  33.  
    list.sortBy(a => -a._3).foreach(println)
  34.  
     
  35.  
    //8、把每个人的姓名性别年龄合成一个输出
  36.  
    var list8 = list.map(a => a._1 a._2 a._3)
  37.  
    println(list8)
  38.  
     
  39.  
    //9、把年龄为奇数和偶数的人分开
  40.  
    var list9 = list.partition({a =>a._3 % 2 == 0})
  41.  
    println(list9)
  42.  
    }
  43.  
     
  44.  
     
  45.  
    }
学新通

 运行结果:

  1.  
    ListBuffer(ListBuffer(张三, 男, 54), ListBuffer(李四, 女, 60), ListBuffer(王五, 女, 63), ListBuffer(赵六, 男, 66), ListBuffer(田七, 女, 51), ListBuffer(王伟, 男, 60))
  2.  
    ListBuffer(ListBuffer(张三, 男, 53), ListBuffer(李四, 女, 59), ListBuffer(王五, 女, 62), ListBuffer(赵六, 男, 65), ListBuffer(田七, 女, 50), ListBuffer(王伟, 男, 59))
  3.  
    ListBuffer((李四,女,20), (王五,女,21), (赵六,男,22), (王伟,男,20))
  4.  
    ListBuffer((张三,男,18), (赵六,男,22), (王伟,男,20))
  5.  
    118
  6.  
    (田七,女,17)
  7.  
    (张三,男,18)
  8.  
    (李四,女,20)
  9.  
    (王伟,男,20)
  10.  
    (王五,女,21)
  11.  
    (赵六,男,22)
  12.  
    (赵六,男,22)
  13.  
    (王五,女,21)
  14.  
    (李四,女,20)
  15.  
    (王伟,男,20)
  16.  
    (张三,男,18)
  17.  
    (田七,女,17)
  18.  
    ListBuffer(张三男18, 李四女20, 王五女21, 赵六男22, 田七女17, 王伟男20)
  19.  
    (ListBuffer((张三,男,18), (李四,女,20), (赵六,男,22), (王伟,男,20)),ListBuffer((王五,女,21), (田七,女,17)))
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaefhh
系列文章
更多 icon
同类精品
更多 icon
继续加载