Scala100道练习题答案

简介: Scala100道练习题答案
package Test.E1
import scala.collection.mutable.Set
import scala.collection.mutable.Map
import scala.collection.immutable.List
import scala.io.StdIn
import scala.util.control.Breaks
import scala.collection.mutable.ArrayBuffer
import scala.util.Random
/**
  * @author ChinaManor
  *         #Description T2
  *         #Date: 4/8/2021 18:03
  */
object T2 {
  //  set集合(1-10)
  //  1、定义一个不可变set集合a,保存以下元素:10,20,30,10,50,40
  def t1()={
    val set =Set(10,20,30,10,50,40)
    println(set)
  }
  //  2、获取a集合的大小
  def t2(): Unit = {
    val set =Set(10,20,30,40,50)
    println(set.size)
  }
  //  3、遍历a集合
  def t3(): Unit = {
    val set =Set(10,20,30,40,50)
  for (i <- set) println(i)
  }
  //  4、a集合删除元素50
  def t4(): Unit = {
    val set =Set(10,20,30,40,50)
    set -= 50
    for (i <- set) println(i)
  }
  //  5、a集合拼接set集合Set(60,80,90)
  def t5(): Unit = {
    val set =Set(10,20,30,40,50)
    val a =Set(60,80,90)
    set ++a
    for (i<- set) println(i)
  }
  //  6、a集合拼接列表List(100,300,200)
  def t6(): Unit = {
    var set =Set(10,20,30,40,50)
    var a =List(100,300,200)
     set ++a
    for (i<- set) println(i)
  }
  //  7、定义一个可变set集合b,初始元素为:5,6,7,8
  def t7(): Unit = {
    var set =Set(5,6,7,8)
    println(set.mkString)
  }
  //  8、b集合中使用+=添加元素9
  def t8(): Unit = {
    var b =Set(5,6,7,8)
    b+=9
    println(b)
  }
  //  9、b集合中删除元素5
  def t9(): Unit = {
      var b =Set(5,6,7,8)
      b -=5
      println(b)
  }
  //  10、b集合使用add添加元素10
  def t10(): Unit = {
    var b =Set(5,6,7,8)
    b.add(9)
    println(b)
  }
  //  Map映射(11-20)
  //  11、构建一个映射map1,内容为"zhangsan" -> 20, "lisi" -> 18, "wangwu" -> "22"
  def t11(): Unit = {
        val map1 =Map("zhangsan"->20,"lisi"->18,"wangwu"->22)
    println(map1)
  }
  //  12、构建一个映射map2,内容为"zhangsan" -> 20, "lisi" -> 18, "wangwu" -> "22"
  def t12(): Unit = {
    val map2 =Map("zhangsan"->20,"lisi"->18,"wangwu"->22)
//    println(map2)
    //  14、获取map2中的lisi的年龄
//    println(map2("lisi"))
    //  15、获取所有的map2中的key值
//    println(map2.keys)
//    map2.keys.foreach(i =>
//         println("Key ="+ i)
//    )
    //  16、获取所有的map2中的value值
//    println(map2.values)
    //  17、map2中新增一组数据:zhaoliu,25
    map2 +=("zhaoliu" ->25)
    //  18、map2中获取zhaoliu的年龄,如果zhaoliu不存在,则返回-1
    println(    map2.getOrElse("zhaoliu","-1")
    )
    //  19、map2中遍历打印所有的key和value
    for(x <- map2)println(x)
    for((key,value) <- map2)println(key+"\t"+value)
    //  20、在map2中添加map1集合
  }
  //  13、构建一个空的映射map3,参数类型为Map[String, Int]
  def t13(): Unit = {
    val map3 =Map[String, Int]()
    println(map3)
  }
  //  方法(21-30)
  //  以下10道题目需要倒入两个包
  //  21. 编写一个方法method1,输入分数之后能够打印出不及格(小于60分)、及格(60-80)、良好(80-90)、优秀(大于90)\
  def method1(int: Int): Unit = {
      if (int <60){
        println (s" = 不及格:${int}")
      }else if (60 >=int&&int <80 ){
        println (s" = 及格:${int}")
      }else if (80 <=int&& int<90 ){
        println (s" = 良好:${int}")
      }else if (int >=90){
        println (s" = 优秀:${int}")
      }
  }
  //  22. 编写一个方法method2,输入名字,判断该名字是否为laowang,如果是返回true,如果不是返回false(不使用return)
    def method2(string: String): Unit ={
      if (string.equals("laowang")){
          println("true")
      }else {
        println("false")
      }
    }
  //  23. 编写一个方法method3,要求能够输入一个大于0的数字参数,能够打印1到该数字范围内的所有数。(2种方式)
  def method3(int: Int): Unit ={
//        if (int>0){
//    val i = Random.nextInt(int)+1
//          for (i<-1 to i)println(i)
//        }
    val i = Random.nextInt(int)+1
    for (i<-1 to i if (int>0))println(i)
  }
  //  24. 编写一个方法method4,要求能够输入一个大于0的数字参数,能够打印1到该数字范围内的所有偶数。
  def method4(int: Int): Unit ={
    if (int>0){
      val i = Random.nextInt(int)+1
      for (i<-1 to i if i%2==0)println(i)
    }
  }
  //  25. 编写一个方法method5,要求能够输入一个大于0的数字参数,能够打印1到该数字范围内的所有奇数,并且该奇数不能被5整除。
  def method5(int: Int): Unit ={
    if (int>0){
      val i = Random.nextInt(int)+1
      for (i<-1 to i if i%2==1&& i%5 !=0)println(i)
    }
  }
  //  26. 编写一个方法method6,要求可以输入任意多个参数(数字类型),将每个参数乘以100后放入数组并返回该数组。
  //  如:2, 4, 6 返回 Array(200, 400, 600)。
  def method6(num:Int*): Unit ={
//    num:Int*
      var arr = new ArrayBuffer[Int]()
          for(i<- num ){
            arr+=i*100
          }
    println(arr)
  }
  //27. 编写一个方法method7,要求输入一个数字,如果数字大于150则抛出异常,并捕获该异常,捕获异常后打印The number is greater than 150。
  //提示:throw new Exception("The number is greater than 150")
  def method7(num:Int): Unit = {
    if (num>150)throw new Exception("The number is greater than 150")
    //      try {
    //        num
    //      } catch {
    //        case num>150 =>println("The number is greater than 150")
    //      }
  }
  //   println(method7(151))
  //28. 编写一个方法method8,要求传入两个参数,默认值分别为10,15,返回两个参数的乘积。
  def method8(a:Int=10,b:Int=15): Int=a*b
  //    println(method8())
  //29. 定义一个名为method9的方法,有三个参数,前两个为数字类型,最后一个参数为f1函数(该函数类型参数接受两个数字类型参数,返回值也是数字类型),该method9方法返回值为数字类型。定义一个函数f1两个参数分别为x,y都为数字类型,执行返回结果是两个参数的和
  var function = (a:Int,b: Int) => a+b
  def method9(x:Int,y:Int,f1:(Int,Int)=>Int): Int={
    f1(x,y)
  }
  //    println(method9(10,20,function))
  //30. 编写一个方法method10,要求有两个参数,两个参数都为大于0的数字,要求能够打印1到第一个参数数字范围内的所有数,在打印过程中遇到与第二个参数相乘大于200就停止。
  def method10(a:Int,b:Int): Unit = {
    for (i<- 1 to a if a>0 if b>0 if i*b<=200){
      println(i)
    }
  }
  //    method10(10,40)
  //  28. 编写一个方法method8,要求传入两个参数,默认值分别为10,15,返回两个参数的乘积。
  //  29. 定义一个名为method9的方法,有三个参数,前两个为数字类型,最后一个参数为f1函数(该函数类型参数接受两个数字类型参数,返回值也是数字类型),该method9方法返回值为数字类型。定义一个函数f1两个参数分别为x,y都为数字类型,执行返回结果是两个参数的和
  //  30. 编写一个方法method10,要求有两个参数,两个参数都为大于0的数字,要求能够打印1到第一个参数数字范围内的所有数,在打印过程中遇到与第二个参数相乘大于200就停止。
  //  数组(31-40)
  //  31、定义一个数组arr1内容为1-10
      def a1(): Unit ={
      val arr =Array(1,2,3,4,5,6,7,8,9,10)
      arr.foreach(println)
  }
  //  32、使用filter过滤器,过滤出来偶数
  def a2(): Unit ={
    val arr =ArrayBuffer(1,2,3,4,5,6,7,8,9,10)
//      println(arr.filter(_%2 ==0).mkString)
  //  33、使用map把arr1数组中每一个元素都取出arr(i)-=arr(i)来放到一个全新数组
        val ints = arr.map(x=>x)
//    println(ints.mkString)
  //  34、使用foreach打印出arr1数组中的元素
//      arr.foreach(println)
  //  35、翻转数组arr1
//        println(arr.sorted.reverse.mkString)
  //  36、修改数组arr1中下标为0的数据为100
//      arr(0)=100
//    println(arr)
  //  37、删除arr1数组下标为0的数据
//      arr -= arr(0)
//    println(arr)
    //  38、arr1数组从下标2开始,删除3个元素
        for(i<-0 to arr.length-1 ){
            if (i>=2&&i<5){
              arr.remove(i)
            }
            println(arr(i))
        }
    //  39、插入数据到arr1数组, 第一个参数是开始的位置,插入50,66,77
//    茴香豆有四种写法
//          arr.insert(0,50)
//          arr.insert(0,66)
//          arr.insert(0,77)
        var arrY = ArrayBuffer[Int]()
        arrY += 50
        arrY ++= arr
        arrY+=66
        arrY+=77
        arr ++= arrY
//        var arr1 =ArrayBuffer(50,66,77)
//          val value = arr1++arr
//          arr1++=arr
//    println(arr)
    //  40、对arr1数组进行降序排列
        arr.sorted.reverse
  }
  //  List列表(41-70)
  //  41、定义一个列表list1,内容为("a", "b" ,"c","d","e")
    def l1(): Unit ={
    var list1 = List("a", "b", "c", "d", "e")
    //  42、在list1列表开头添加元素t
//          val value = "t":: list1
    val value = List("m","n")
  //  43、在列表开头添加指定列表List("m","n")的元素
//    val v2 = value.mkString::list1
//    println(v2)
    //    44、在列表list1后添加元素1
//          list1 +="1"
    //  45、将列表的所有元素添加到 StringBuilder
//        val builder = new StringBuilder
//          list1.addString(builder)
    //    46、将列表的所有元素添加到 StringBuilder并指定分隔符为","
//          list1.addString(builder,",")
    builder.append(list1)
//    //  47、获取列表索引为0的元素
//          list1.addString(builder,",")
//    //  48、检测列表中是否包含指定的元素a
//          list1.contains("a")
//    //  49、向list1列表中追加数据"a"
//          list1+="a"
//    //  50、去除list1列表的重复元素,并返回新列表
//          list1.distinct
//    //  51、list1丢弃前3个元素,并返回新列表
//          list1.drop(3)
//    //  52、list1丢弃最后2个元素,并返回新列表
//          list1.dropRight(2)
    //  53、检测列表list1是否以指定a结尾
//          val bool = list1.last.equals("a")
//          println(bool)
    //  54、判断是否是以指定a开始的列表list1
//    val bool = list1.head.equals("a")
    val bool = list1.startsWith("a")
    println(bool)
    //  55、获取list1列表的第一个元素
        println(list1.head)
    //  56、在list1中从指定位置 0 开始查找元素d第一次出现的位置
      println(list1.indexOf("d",0))
    //  57、list1返回所有元素,除了最后一个
    //  58、检测列表list1是否为空
    println(list1.isEmpty)
    //  59、返回list1列表最后一个元素
    println(list1.last)
    //  60、返回list1所有元素,除了第一个
    println(list1.tail)
    //  61、提取列表list1的前2个元素
    println(list1.take(2))
    //  62、提取列表list1的后2个元素
    println(list1.takeRight(2))
    //  63、列表list1转换为数组
          val array = list1.toArray
    //  64、list1转换为 Seq
        val seq = list1.toSeq
    //    65、list1转换为 Set
          val set = list1.toSet
    //    66、list1列表转换为字符串
        val str = list1.toString()
    //  67、list1列表反转
          list1.sorted.reverse
    //  68、list1列表排序
          list1.sorted
    //  69、检测list1列表在指定位置1处是否包含指定元素a
        list1.head.equals("a")
        list1.take(0).equals("a")
    //  70、列表list1转换为数组
        list1.toArray
  }
  //  元组(71-76)
  //  71 创建一个元组Y1,内部含有zhangsan   biejing   20  true  四个数据
  def t71(): Unit ={
    val tuple =("zhangsan","beijing",20,true)
    println(tuple.toString())
  //  72 获取元组Y1内的第二个元素(biejing)
    println(tuple._2)
  }
  //  现有数据如下图
  //  姓名  zhangsan  lisi  wangwu  zhaoliu
  //  年龄  20  30  40  50
  //  性别  1 0 1 0
  //  73 创建一个元组Y2,内部含有(zhangsan ,lisi,wangwu,zhaoliu),(20,30,40,50),(1,0,1,0)  3个数据(每个内部依然是元组)。
  def t72()={
    val tuple =(("zhangsan" ,"lisi","wangwu","zhaoliu"),(20,30,40,50),(1,0,1,0))
//    println(tuple.toString())
    //  74 获取zhangsan,并输出
  println(tuple._1._1)
    //  75 获取lisi 的年龄,并输出
  println(tuple._2._2)
    //  76 获取wangwu的性别,并输出
  println(if (tuple._3._3.equals(1)){"男"})
  }
  //  Iterator迭代器(77-86)
  //  77、 定义一个迭代器iter1,数据为"Hadoop","Spark","Java"
    def t77() ={
    val iter1 =Iterator("Hadoop","Spark","Java");
   while (iter1.hasNext)println(iter1.next())
  }
  //  78、遍历iter1,使用while循环并打印输出
  def t78() ={
    val iter1 =Iterator("Hadoop","Spark","Java");
    while (iter1.hasNext)println(iter1.next())
  }
  //  79、定义一个迭代器iter2,数据为10,20,20,30,34,50,60
  def t79() ={
    val iter2 =Iterator(10,20,20,30,34,50,60);
    //  80、打印出iter2中的最大值
    //  81、打印出iter2中的最小值
    //  82、打印出iter2的长度
//    println( iter2.max)
//    println( iter2.min)
//    println( iter2.length)
    //  83、合并iter2和iter1两个迭代器
//    val value = iter2++iter2
//    val value = iter2.drop(2)
    //  84、iter2丢弃前2个元素
    //  85、检查iter2是否为空
    val value = iter2.isEmpty
    println(if(value.equals(false)){"空值"}else if(value.equals(true)){"不空"})
    //  86、iter2返回前 2个元素的新迭代器
    val iter1 = iter2.take(2)
    while (iter1.hasNext)println(iter1.next())
  }
  //  87.变长数组的特点是什么?
//  变长数组指的是数组的长度是可变的,可以往数组中添加、删除元素
  //  88.创建没有初始元素的ArrayBuffer变长数组,语法结构是什么?
//    var/val a  =ArrayBuffer[元素类型]()
  //  89.创建带有初始元素的ArrayBuffer的语法结构是什么?
//  var/val a  =ArrayBuffer(元素1,元素2,元素3......)
  //  90.在定义变长数组的时候需要导入哪个包?
//  import scala.collection.mutable.ArrayBuffer
  //  91.定义变长数组的时候需要注意的点?
//      要导包
  //  92.定义一个变长数组 a,数组类型为string,长度为0
def  t92(): Unit ={
  val a  =ArrayBuffer[String]()
  //  93.向变长数组中添加元素spark
  a+="spark"
  //  94.定义一个包含以下元素的变长数据,10,20,30,40,50
  val b  =ArrayBuffer(10,20,30,40,50)
  //  95.b数组删除元素50
  b-=50
  //  96.在b数组后面追加一个数组Array(70)
  val c  =Array(70)
  b++c
  //  97.使用for循环遍历b数组的内容并输出
  for(i<-b){println(i)}
  //  98.使用for循环遍历b数组的索引下标,并打印元素
  for(i<-0 to b.length -1){println(b(i))}
  for(i<-0 until  b.length -1){println(b(i))}
}
  //  99.在scala中数组常用方法有哪些?
//  - 求和——sum方法
//  - 求最大值——max方法
//  - 求最小值——min方法
//  - 排序——sorted方法
  //  100.定义一个数组,包含以下几个元素(10,20,30,40),请计算该数组的和
    def t100(): Unit ={
      val t100 =Array(10,20,30,40)
      println(t100.sum)
      //  101.定义一个数组,包含以下几个元素(130,120,310,140),请计算该数组的最大值
      val t101 =Array(130,120,310,140)
      println(t101.max)
      //  102.定义一个数组,包含以下几个元素(130,120,310,140),请计算该数组的最小值
      println(t101.min)
      //  103.定义一个数组,包含以下几个元素(130,120,310,140),请计算该数组的和
      println(t101.sum)
      //  104.定义一个数组,包含以下几个元素(130,120,310,140),请实现降序排序
      println(t101.sorted.reverse.mkString)
    }
  def main(args: Array[String]): Unit = {
//    t1()
//      t2()
//    t3()
//    t4()
//    t5()
//    t6()
//    t7()
//    t8()
//    t9()
//    t10()
//    t11()
//    t12()
//    t13()
//    t14()
//    method1(90)
//    method2("laowang")
//    method3(9)
//    method4(9)
//    method5(999)
//    method5(999)
//    method5(999)
//    method6(2,4,6)
//    method7(151)
//    a1();
    a2()
//    a3()
//    l1()
//    t71()
//    t72()
//    t77()
//    t77()
//    t79()
//    t92()
//    t100()
  }
//
}
目录
相关文章
|
5月前
|
分布式计算 Java Hadoop
Scala入门必刷的100道练习题(附答案)
Scala入门必刷的100道练习题(附答案)
320 1
|
2月前
|
Unix Java C++
最常见的 35 个 Python 面试题及答案(2018 版)
最常见的 35 个 Python 面试题及答案(2018 版)
57 0
|
3月前
|
Java Scala
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
|
5月前
|
分布式计算 Java Hadoop
Scala练习题104道
Scala练习题104道
43 0
|
5月前
|
大数据 Scala
Scala面向对象练习题34道
Scala面向对象练习题34道
62 0
|
5月前
|
存储 算法 Python
将题目与答案整合到一起的 python 代码
将题目与答案整合到一起的 python 代码
21 0
|
Scala
scala多种杨辉三角简洁输出方式
scala多种杨辉三角简洁输出方式
271 0
|
机器学习/深度学习 算法 Java
Java基础——【习题二】函数练习题
Java基础——【习题二】函数练习题
Java基础——【习题二】函数练习题
|
存储 搜索推荐 Java
Java基础——【习题三】数组练习题
Java基础——【习题三】数组练习题
Java基础——【习题三】数组练习题
|
机器学习/深度学习 Java
Java基础——【习题一】流程控制练习题
要求用户输入一个年份,判断并输出该年份是闰年还是平年。 提示:判断闰年的条件为:(year%4==0&&year%100!=0) ||(year%400==0)
Java基础——【习题一】流程控制练习题