《快学Scala》第三章习题解答

package ggg

import scala.collection.JavaConversions.asScalaBuffer
import java.awt.datatransfer.{DataFlavor, SystemFlavorMap}
import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.Buffer
import scala.util.Random

object ChapterThree {

  def exercise1(n: Int): Array[Int] = {
    //1.编写一段代码,将a设置为n个随机整数的数组,要求随机数位于[0,n)之间
    val rand: Random = new Random()
    val randArr: Array[Int] = new Array[Int](n)
    for (i <- 0 until n) randArr(i) = Random.nextInt()
    randArr
  }

  //2.编写一个程序,将整数数组中相邻的元素置换;例如,Array(1,2,3,4,5)置换后变为Array(2,1,4,3,5
  def exercise2(arr: Array[Int]): Array[Int] = {
    for (i <- Range(0, arr.length / 2 + 1, 2)) {
      val temp = arr(i)
      arr(i) = arr(i + 1)
      arr(i + 1) = temp
    }
    arr
  }

  //3.重复前一个练习,不过这一次生成的新的值交换过的数组,用for/yield
  def exercise3(arr: Array[Int]): Array[Int] = {
    val newArr = for (i <- Range(0, arr.length)) yield {
      if (i % 2 == 0 & i == arr.length - 1) arr(i) else if (i % 2 == 0) arr(i + 1) else arr(i - 1)
    }
    newArr.toArray
  }

  //4.给定一个整数数组,产生一个新的数组,包含原数组中的所有正值,按原有顺序排序
  //之后的元素是所有的零或者负值,按原有顺序排序
  def exercise4(arr:Array[Int]) : Array[Int] = {
    var newArr: Array[Int] = for(i <- arr if arr(i) > 0 ) yield i
    val newArr2 : Array[Int] = for(i <-arr if arr(i) <= 0) yield i
    newArr ++= newArr2
    newArr
  }

  //5.如何计算Array[Double]的平均值
  def exercise5(arr : Array[Double]) : Double = {
    arr.sum / arr.length
  }
  //7.写一个程序,输出数组中的所有值,去掉重复项
  def exercise7(arr:Array[Int]):Array[Int] = {
    arr.distinct
  }
  //9.创建一个java.util.TimeZone.getAvailableIDs返回的时区的集合,判断条件是它们在美洲;去掉"America/"前缀并排序
  def exercise9():Unit = {
    var timezoneArr:Array[String] = java.util.TimeZone.getAvailableIDs()
    var filterArr = for(elem <- timezoneArr if !elem.startsWith("America/")) yield elem
    var sortedArr = filterArr.sorted
    for(elem <- sortedArr) println(elem)
  }
  //10.引入java.awt.datatransfer._并构建一个类型为SystemFlavorMap的对象
  //然后以DataFlavor.imageFlavor为参数调用getNativesForFlavor的方法,以Scala缓冲保留返回值
  //为什么要用这样一个晦涩难懂的类?因为java标准类库中很难得到试用java.util.List的代码
  def execise10():Unit = {
    val flavors = SystemFlavorMap.getDefaultFlavorMap.asInstanceOf[SystemFlavorMap]
    val buffer:Buffer[String] = flavors.getNativesForFlavor(DataFlavor.imageFlavor)
  }




  def main(args: Array[String]): Unit = {
    println("=================exercise1=====================")
    val arr1 = ChapterThree.exercise1(4)
    for (n <- arr1) print(n + " ")
    println("\n")

    println("=================exercise2=====================")
    val arr2 = ChapterThree.exercise2(Array(1, 2, 3, 4, 5))
    for (n <- arr2) print(n + " ")
    println("\n")

    println("=================exercise3=====================")
    val arr3 = ChapterThree.exercise3(Array(1, 2, 3, 4, 5))
    for (n <- arr3) print(n + " ")
    println("\n")

    println("=================exercise4=====================")
    val arr4 = ChapterThree.exercise4(Array(3,1,-2,6,0,-1,7))
    for(n <- arr4) print(n+" ")
    println("\n")

    println("=================exercise5=====================")
    println(ChapterThree.exercise5(Array(1.0,2.0,3.0)))

    println("=================exercise6=====================")
    //如何组织Array[Int]使他们反序排列,如果是ArrayBuffer呢?
    val arr61 = Array[Int](1,2,3)
    val arr62 = new Array[Int](arr61.length)
    for(i <- 0 until arr61.length){
      arr62(arr61.length - 1 - i) = arr61(i)
    }
    for(n <- arr62) print(n+" ")
    println("\n")

    val arr63 = ArrayBuffer(1,2,3)
    val arr64 = arr63.reverse
    for(n <- arr64) print(n+" ")
    println("\n")

    println("=================exercise7=====================")
    val arr7 = ChapterThree.exercise7(Array(1,3,1,2,4,2))
    for(n <- arr7) print(n+" ")
    println("\n")

    //第8题看不懂题意

    println("=================exercise9=====================")
    ChapterThree.exercise9()

  }

}

猜你喜欢

转载自blog.csdn.net/Ach_orite/article/details/81214537