Scala 编程题三

还有系列的和Scala编程题二

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

代码:

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

}

运行结果:

1020304050

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

代码:

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

  }
}

运行结果:

a,b,c

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

代码:

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

运行结果:

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

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

代码:

object ArrayTest4{
  def main(args: Array[String]): Unit = {
    val arr = Array.ofDim[Double](5, 4)
    for(x <- 0 to arr.length-1){
      for(y <- 0 to arr(x).length-1){
        arr(x)(y) = y
      }
    }
    for(x <- 0 to arr.length-1){
      for(y <- 0 to arr(x).length-1){
        print(arr(x)(y)+" ")
      }
      println()
    }

  }
}

运行结果:

0.0 1.0 2.0 3.0 
0.0 1.0 2.0 3.0 
0.0 1.0 2.0 3.0 
0.0 1.0 2.0 3.0 

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

代码:

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

运行结果:

89
6

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

代码:

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

运行结果:

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

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

代码:

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

运行结果:

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

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

代码:

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

运行结果:

246
-100
20

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

代码:

object ListTest {
  def main(args: Array[String]): Unit = {

    var a = ListBuffer[Int]()
    while(a.length<10){
      a += Random.nextInt(100)
      a=a.distinct.sorted
    }
    println(a+",")

  }
}

运行结果:

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

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

代码:

object ListTest2 {
  def main(args: Array[String]): Unit = {
    val list = ListBuffer("def","1","fff")
    val list2 = ListBuffer.fill(3)("def")
    list ++= list2
    println(list)
    for(x <- list){
      if(x.equals("def")){
        list -= x
      }
    }
    print(list)
  }
}

运行结果:

ListBuffer(def, 1, fff, def, def, def)
ListBuffer(1, fff)

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

代码:

object ListTest3{
  def main(args: Array[String]): Unit = {
    val list = ListBuffer("a","a0","b","b1","c","9","d","d9")
    for(x <- list){
      for(y <- 0 to 9){
        if(x.contains(y.toString)){
          list -=x
        }
      }
    }
    print(list)
  }
}

运行结果:

ListBuffer(a, b, c, d)

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

代码:

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

运行结果:

(张三,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 压扁成一个

代码:

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

}

运行结果:

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"先按空格拆分,在压平 。统计单词出现的频次

代码:

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

运行结果:

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

15.并集,交集,差集

代码:

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

运行结果:

List(5, 6, 4, 7, 1, 2, 3, 4)
List(4)
List(5, 6, 7)
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)各门课程的平均分是多少;

代码:

object CourseTest{
  def main(args: Array[String]): Unit = {
    val list= ListBuffer(
      ("Tom","DataBase",80),
      ("Tom","Algorithm",50),
      ("Tom","DataStructure",60),
      ("Jim","DataBase",90),
      ("Jim","Algorithm",60),
      ("Jim","DataStructure",80))
    /**1)该系总共有多少学生;*/
    val people = scala.collection.mutable.Set[String]()
    for(x <- list){
      people += x._1
    }
    println(people.size)

    /**(2)该系共开设了多少门课程;*/
    val course = scala.collection.mutable.Set[String]()
    for(x <- list){
      course += x._2
    }
    println(course.size)

    /**(3)Tom同学的总成绩平均分是多少;*/
      var sum =0
      var count = 0
    val course2 = scala.collection.mutable.Set[String]()
    for(x <- list){
      if(x._1.equals("Tom")){
        sum += x._3
        count += 1
      }
    }
    println(sum/count)

    /**(4)求每名同学的选修的课程门数;*/
    var map = scala.collection.mutable.Map[String,Int]()
    for(x<- list){
      var name=x._1
      if(map.contains(name)){
        map(name) += 1
      }else{
        map += (name ->1)
      }
    }
    println(map)


    /**(5)该系DataBase课程共有多少人选修;*/
    var count2 =0
    for(x<- list){
      if(x._2.equals("DataBase")){
        count2 += 1
      }
    }
    println(count2)

    /**(6)各门课程的平均分是多少;*/
    var avg =list.groupBy(_._2)
    for(a<-avg){
      var sum =0
      var size=0
      for(b<-a._2){
        sum+=b._3
        size+=1
      }
      println(s"${a._1}的平均分是${sum/size}")

    }

  }
}

  运行结果:

2
3
63
HashMap(Tom -> 3, Jim -> 3)
2
DataStructure的平均分是70
DataBase的平均分是85
Algorithm的平均分是55

17..题目如下:

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

代码:

package mx2.Demo.work

import scala.collection.mutable.ListBuffer

object Test5 {
  def main(args: Array[String]): Unit = {

    var list = ListBuffer(("张三",'男',18),("李四",'女',20),("王五",'女',21),("赵六",'男',22),("田七",'女',17),("王伟",'男',20))
    //1、把每个人的年龄改成之前的3倍
    var list1 = list.map(a =>ListBuffer(a._1,a._2,a._3*3))
    println(list1)

    //2、把每个人的年龄改成之前的2倍,之后再这个基础上进行减一
    var list2 = list.map(a => ListBuffer(a._1,a._2,a._3*3-1))
    println(list2)

    //3、年龄小于20的过滤掉
    var list3 = list.filter(a => if(a._3 <20)false else true)
    println(list3)

    //4、性别是女的过滤掉
    var list4 = list.filter(a => if(a._2 =='女')false else true)
    println(list4)

    //5、计算一下所有人的总年龄
    var list5 = list.map(a => a._3).reduce((a,b)=>a+b)
    println(list5)

    //6、请按照年龄从小到大排序
    list.sortBy(a => a._3).foreach(println)

    //7、请按照年龄从大到小排序
    list.sortBy(a => -a._3).foreach(println)

    //8、把每个人的姓名性别年龄合成一个输出
    var list8 = list.map(a => a._1 + a._2 + a._3)
    println(list8)

    //9、把年龄为奇数和偶数的人分开
    var list9 = list.partition({a =>a._3 % 2 == 0})
    println(list9)
  }


}

 运行结果:

ListBuffer(ListBuffer(张三, 男, 54), ListBuffer(李四, 女, 60), ListBuffer(王五, 女, 63), ListBuffer(赵六, 男, 66), ListBuffer(田七, 女, 51), ListBuffer(王伟, 男, 60))
ListBuffer(ListBuffer(张三, 男, 53), ListBuffer(李四, 女, 59), ListBuffer(王五, 女, 62), ListBuffer(赵六, 男, 65), ListBuffer(田七, 女, 50), ListBuffer(王伟, 男, 59))
ListBuffer((李四,女,20), (王五,女,21), (赵六,男,22), (王伟,男,20))
ListBuffer((张三,男,18), (赵六,男,22), (王伟,男,20))
118
(田七,女,17)
(张三,男,18)
(李四,女,20)
(王伟,男,20)
(王五,女,21)
(赵六,男,22)
(赵六,男,22)
(王五,女,21)
(李四,女,20)
(王伟,男,20)
(张三,男,18)
(田七,女,17)
ListBuffer(张三男18, 李四女20, 王五女21, 赵六男22, 田七女17, 王伟男20)
(ListBuffer((张三,男,18), (李四,女,20), (赵六,男,22), (王伟,男,20)),ListBuffer((王五,女,21), (田七,女,17)))

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lambda-小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值