Scala 100题 题目+题解

题目来源

package com.bigdata

import java.util.Date
import scala.collection.convert.ImplicitConversions.`set AsJavaSet`
import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer


object testDemo01
{
  def t5(): Unit =
  {
    var set = Set(10, 20, 30, 40, 50)
    var list = List(100, 200, 300)
    var res = set ++ list
    res.foreach(i => println(i))
  }

  def t7(): Unit =
  {
    var set = Set(5, 6, 7, 8)
    println(set.mkString)
  }

  //  集合中使用+=添加元素9
  def t8(): Unit =
  {
    var set = Set(5, 6, 7, 8)
    set += 9
    println(set)
  }

  //  集合中删除元素5
  def t9(): Unit =
  {
    var set = Set(5, 6, 7, 8)
    set -= 7
    print(set)

    //    Set(5, 6, 8)
  }


  //  集合使用add添加元素10
  def t10(): Unit =
  {
    var set = Set(5, 6, 7, 8)
    set.add(9)
    println(set)
    /*
    * 如果这样直接使用,会报错的。报错内容如下:
    *   Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractCollection.add(AbstractCollection.java:262)
    * */
  }

  /*  构建一个映射map1,内容为"zhangsan" -> 20, "lisi" -> 18, "wangwu" -> "22"*/
  def t11(): Unit =
  {
    val map1 = Map("zhangsan" -> 20, "lisi" -> 21, "wangwu" -> "22")
    println(map1)
    //    输出:Map(zhangsan -> 20, lisi -> 21, wangwu -> 22)
  }

  /*构建一个空的映射map3,参数类型为Map[String, Int]*/
  def t12(): Unit =
  {
    val map3 = Map[String, Int]()
    println(map3)
    //    输出:Map()
  }

  /*构建一个映射map2,内容为"zhangsan" -> 20, "lisi" -> 18, "wangwu" -> "22"
  * 且:获取map2中的lisi的年龄
  * */
  def t13(): Unit =
  {
    val map2 = Map("zhangsan" -> 20, "lisi" -> 21, "wangwu" -> 22)
    println(map2("lisi"))
    //    输出:21
  }

  /*构建一个映射map2,内容为"zhangsan" -> 20, "lisi" -> 18, "wangwu" -> "22"
  * 且:获取map2中的key值
  * */
  def t14(): Unit =
  {
    val map2 = Map("zhangsan" -> 20, "lisi" -> 21, "wangwu" -> 22)
    print(map2.keys)
    //    输出:Set(zhangsan, lisi, wangwu)
    map2.keys.foreach(i => print(i + " "))
    //    输出:zhangsan lisi wangwu

    /*获取所有的map2中的value值*/
    println()
    map2.values.foreach(i => print(i + " "))
    //    输出20 21 22

    /*map2中新增一组数据:zhaoliu,25*/
    println()
    //    map2 += ("zhaoliu"->25)
    //    如果如上面这样写时不对的,因为map2是 val ,如果我们想增加,需要继承一个var
    var map22 = map2
    map22 += ("zhaoliu" -> 25)
    println(map22)
    //    输出:Map(zhangsan -> 20, lisi -> 21, wangwu -> 22, zhaoliu -> 25)

    /*遍历打印所有的key和value*/
    for ((key, value) <- map22) println(key + "\t" + value)
    /*输出:
    * zhangsan	20
      lisi	21
      wangwu	22
      zhaoliu	25
    * */
    println()
    for (x <- map22) print(x)
    //    输出:(zhangsan,20) (lisi,21) (wangwu,22) (zhaoliu,25)

  }

  /*编写一个方法method1,输入分数之后能够打印出不及格(小于60分)、及格(60-80)、良好(80-90)、优秀(大于90)*/
  def method1(int: Int): Unit =
  {
    if (int < 60)
    {
      println(s"= 不及格:${int}")
    }
    else if (int >= 60 && int < 80)
    {
      println(s"= 及格:${int}")
    }
    else if (int >= 80 && int < 90)
    {
      println(s"= 良好:${int}")
    }
    else
    {
      println(s"=优秀:${int}")
      println("优秀=%d", int)
    }
    /*输出:=优秀:92
          (优秀=%d,92)*/
  }


  //  编写一个方法method3,要求能够输入一个大于0的数字参数,能够打印1到该数字范围内的所有数。(2种方式)
  def method3(num: Int): Unit =
  {
    if (num > 0)
    {
      for (i <- 1 to num) print(i + " ")
    }
    /*输出:1 2 3 4 5 6 7 8 9 10 */

    println()
    //    第二种方式:
    for (i <- 1 to num if (num > 0)) print(i + " ")
    //    输出:1 2 3 4 5 6 7 8 9 10
  }


  //  编写一个方法method4,要求能够输入一个大于0的数字参数,能够打印1到该数字范围内的所有偶数。
  def method4(num: Int): Unit =
  {
    for (i <- 1 to num if (i % 2 == 0)) print(i + " ")
    /*输出:2 4 6 8 10 */
  }

  //  编写一个方法method5,要求能够输入一个大于0的数字参数,能够打印1到该数字范围内的所有奇数,并且该奇数不能被5整除。
  def method5(num: Int): Unit =
  {
    for (i <- 1 to num if (i % 2 != 0 && i % 5 != 0)) print(i + "  ")
    /*输出:1  3  7  9  11  13  17  19  21  23 */
  }

  //  编写一个方法method6,要求可以输入任意多个参数(数字类型),将每个参数乘以100后放入数组并返回该数组。
  /*此题重点在于:!!!! 输出任意多个参数!!!!*/
  def method6(num: Int*): Unit =
  {
    var numsArray = new ArrayBuffer[Int]()
    for (i <- num)
    {
      var temp = i * 100
      numsArray += temp

    }
    println(numsArray)
    /*输出:ArrayBuffer(100, 200, 300, 400, 500, 600)*/
  }

  //  编写一个方法method7,要求输入一个数字,如果数字大于150则抛出异常,并捕获该异常,捕获异常后打印The number is greater than 150。
  def method7(num: Int): Unit =
  {
    if (num > 150) throw new Exception(" The number is greater than 150")

    /*输出:Exception in thread "main" java.lang.Exception:  The number is greater than 150
	at com.bigdata.testDemo01$.method7(testDemo01.scala:193)*/
  }

  //  编写一个方法method8,要求传入两个参数,默认值分别为10,15,返回两个参数的乘积。
  def method8(num1: Int = 10, num2: Int = 15): Unit =
  {
    println(num1 * num2)
  }

  /*定义一个名为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)
  }

  /*编写一个方法method10,要求有两个参数,两个参数都为大于0的数字,
  要求能够打印1到第一个参数数字范围内的所有数,在打印过程中遇到与第二个参数相乘大于200就停止。
  */
  def method10(num1: Int, num2: Int): Unit =
  {
    for (i <- 1 to num1 if (i * num2 < 200)) print(i + " ")
    //    输出:1 2 3 4
  }


  //  定义一个数组arr1内容为1-10
  def a1(): Unit =
  {
    var arrays = new ArrayBuffer[Int]()
    for (i <- 1 to 10) arrays += i

    println(arrays)
    //    输出:ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  }

  //  使用filter过滤器,过滤出来偶数
  def a2(): Unit =
  {
    var arrays = new ArrayBuffer[Int]()
    for (i <- 1 to 10) arrays += i
    println(arrays.filter(_ % 2 == 0).mkString)
    //    输出:246810
  }


  //  使用map把arr1数组中每一个元素都取出arr(i)-=arr(i)来放到一个全新数组
  def a3(): Unit =
  {
    var arrays = new ArrayBuffer[Int]()
    for (i <- 1 to 10) arrays += i
    /*映射原数组的元素 到一个新的数组*/
    var ints = arrays.map(x => x)
    println(ints)
    /*输出:ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)*/

    //    翻转数组ints
    println(ints.reverse)
    /*输出:ArrayBuffer(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)*/

    //    修改数组arr1中下标为0的数据为100
    ints(0) = 100
    println(ints)
    /*输出:ArrayBuffer(100, 2, 3, 4, 5, 6, 7, 8, 9, 10)*/

    //    删除arr1数组下标为0的数据
    ints -= ints(0)
    println(ints)
    /*输出:ArrayBuffer(2, 3, 4, 5, 6, 7, 8, 9, 10)*/

    //    arr1数组从下标2开始,删除3个元素
    for (i <- 2 to ints.length - 1 if (i < 2 + 3)) ints -= ints(i)
    println(ints)
    /*输出:ArrayBuffer(2, 3, 5, 7, 9, 10)*/

    //    插入数据到arr1数组, 第一个参数是开始的位置,插入50,66,77
    ints.insert(0, 50)
    ints.insert(0, 66)
    ints.insert(0, 77)
    println(ints)
    /*输出:ArrayBuffer(77, 66, 50, 2, 3, 5, 7, 9, 10)*/

    //    对arr1数组进行降序排列
    println(ints.sorted.reverse)
    /*输出:ArrayBuffer(77, 66, 50, 10, 9, 7, 5, 3, 2)*/


  }


  //   定义一个列表list1,内容为("a", "b" ,"c","d","e")
  def list1(): Unit =
  {
    var list1 = List("a", "b", "c", "d", "e")
    println(list1)
    //    在list1列表开头添加元素t
    var value = "t" :: list1
    println(value)
    /*输出:  List(t, a, b, c, d, e)*/


    //    在列表开头添加指定列表List("m","n")的元素
    var value1 = List("m", "n")
    var temp = value1.mkString :: list1
    println(temp)
    /*List(mn, a, b, c, d, e)*/


    //  在列表list1后添加元素1
    var temp2 = list1 :+ "1"
    println(temp2)
    /*输出:List(a, b, c, d, e, 1)*/


    //    将列表的所有元素添加到 StringBuilder
    var builder = new StringBuilder()
    list1.addString(builder)
    println(builder)
    /*输出:abcde  */

    //    将列表的所有元素添加到 StringBuilder并指定分隔符为","
    var temp3 = list1.addString(builder, ",")
    println(temp3)
    /*输出:abcdea,b,c,d,e */

    //    检测列表中是否包含指定的元素a
    println(list1.contains("a"))
    /*输出: true */


    //  去除list1列表的重复元素,并返回新列表
    val list2 = list1.distinct
    println(list2)

  }

  //  创建一个元组Y1,内部含有zhangsan   biejing   20  true  四个数据
  def t71(): Unit =
  {
    var tuple1 = ("zhangsan", "beijing", "20", true)
    println(tuple1.toString())
    /*输出: (zhangsan,beijing,20,true) */

    //    获取元组Y1内的第二个元素(biejing)
    println(tuple1._2)
    /*输出:beijing*/


  }

  //  创建一个元组Y2,内部含有(zhangsan ,lisi,wangwu,zhaoliu),(20,30,40,50),(1,0,1,0)  3个数据(每个内部依然是元组)。
  def t72(): Unit =
  {
    val tuple = (("zhangsan", "lisi", "wangwu", "zhaoliu"), (20, 30, 40, 50), (1, 0, 1, 0))
    //    获取zhangsan,并输出
    println(tuple._1._1)
    /*输出: zhangsan*/
    //    获取lisi 的年龄,并输出
    var it = tuple._1


  }

  //  定义一个迭代器iter1,数据为"Hadoop","Spark","Java"
  def t77(): Unit =
  {
    var iter1 = Iterator("Hadoop", "Spark", "Java");
    while (iter1.hasNext)
    {
      println(iter1.next())
    }
    /*输出:Hadoop
    Spark
    Java*/
  }


  def main(args: Array[String]): Unit =
  {
    //    method1(92)
    //    method3(10)
    //    method4(10)
    //    method5(25)
    //    method6(1,2,3,4,5,6)
    //    method7(500)
    //    method8(2,5)
    //    method9(10, 20, function)
    //    method10(10,40)

    //    a1()
    //    a2()
    //    a3()
    //    list1()

    //    t71()
    //    t72()
  }

  t77()


}


posted @ 2022-04-25 10:59  取我方天画戟来  阅读(417)  评论(0)    收藏  举报