《快學Scala》第三章習題解答
阿新 • • 發佈:2018-12-23
RT。
package com.scalalearn.scala.main //java中的List轉為scala buffer至關重要的引入 import scala.collection.JavaConversions.asScalaBuffer import java.awt.datatransfer.{DataFlavor, SystemFlavorMap} import scala.collection.mutable.Buffer import scala.collection.mutable.ArrayBuffer import scala.util.Random /** * 快學scala 03習題 */ object LearnScala03 { //1.編寫一段程式碼,將a設定為n個隨機整數的陣列,要求隨機數位於[0,n)之間 def execise1(n:Int):Array[Int] = { val random:Random = new Random() val randomArr:Array[Int] = new Array[Int](n) for(i <- 0 until n) randomArr(i) = random.nextInt(n) randomArr } //2.編寫一個程式,將整數陣列中相鄰的元素置換;例如,Array(1,2,3,4,5)置換後變為Array(2,1,4,3,5) def execise2(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/yeild def execise3(arr:Array[Int]):Array[Int] = { val newArr = for( i <- Range(0,arr.length)) yield { if (arr.length % 2 == 1 && i == arr.length - 1) arr(i) else if (i % 2 == 0) arr(i+1) else arr(i-1) } newArr.toArray } //4.給定一個整數陣列,產生一個新的陣列,包含原陣列中的所有正值,按原有順序排序 //之後的元素是所有的零或者負值,按原有順序排序 def execise4(arr:Array[Int]):Array[Int] = { var newArr:Array[Int] = for (elem <- arr if elem > 0) yield elem val newArr1:Array[Int] = for (elem <- arr if elem <= 0) yield elem newArr ++= newArr1 newArr } //5.如何計算Array[Double]的平均值 def execise5(arr:Array[Double]):Double = { arr.sum/arr.length } //7.寫一個程式,輸出陣列中的所有值,去掉重複項 def execise7(arr:Array[Int]):Array[Int] = { arr.distinct } //9.建立一個java.util.TimeZone.getAvailableIDs返回的時區的集合,判斷條件是它們在美洲;去掉"America/"字首並排序 def execise9():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("=================execise1=====================") val arr1 = LearnScala03.execise1(4) for(n <- arr1) print(n+" ") println("\n") println("=================execise2=====================") val arr2 = LearnScala03.execise2(Array(1,2,3,4,5)) for(n <- arr2) print(n+" ") println("\n") println("=================execise3=====================") val arr3 = LearnScala03.execise3(Array(1,2,3,4,5)) for(n <- arr3) print(n+" ") println("\n") println("=================execise4=====================") val arr4 = LearnScala03.execise4(Array(3,1,-2,6,0,-1,7)) for(n <- arr4) print(n+" ") println("\n") println("=================execise5=====================") println(LearnScala03.execise5(Array(1.0,2.0,3.0))) println("=================execise6=====================") //如何組織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("=================execise7=====================") val arr7 = LearnScala03.execise7(Array(1,3,1,2,4,2)) for(n <- arr7) print(n+" ") println("\n") //第8題看不懂題意 println("=================execise9=====================") LearnScala03.execise9() } }