--- title: A scala exercise a day 1 slug: a-scala-exercise-a-day-1 date: 2016-11-16 10:44:41 updated: 2020-09-04 12:44:34 tags: - Scala category: 编程 cover: /images/2020/09/2020090412164155.jpg summary: 编写一段代码,将 a 设置为一个 n 个随机整数的数组,要求随机数介于 [0, n) 之间。 --- ![mocha ドラム水槽](/images/2020/09/2020090412291981.jpg) 1、编写一段代码,将 a 设置为一个 n 个随机整数的数组,要求随机数介于 `[0, n)` 之间。 ```scala def randomArray(n: Int) : Array[Int] = { (for (i <- 0 until n) yield (math.random * n).toInt).toArray } ``` 2、编写一个循环,将整数数组中相邻的元素置换。例如,`Array(1, 2, 3, 4, 5)` 经过置换之后变为 `Array(2, 1, 4, 3, 5)`。 ```scala def transferArray(array: Array[Int]) : Array[Int] = { for (i <- array.indices if i % 2 == 1) { val temp = array(i) array(i) = array(i - 1) array(i - 1) = temp } array } ``` 3、重复前一个练习,不过这次生成一个新的值交换过的数组。用 `for/yield`。 ```scala def transferArray(array: Array[Int]) : Array[Int] = { (for (i <- array.indices) yield { i % 2 match { case 1 => array(i - 1) case 0 => if (i + 1 == array.length) array(i) else array(i + 1) } }).toArray } ``` 4、给定一个整数数组,产出一个新的数组,包含元素组中的所有正值,以原有顺序排列,之后的元素是所有的零或负值,以原有顺序排列。 ```scala def sortArray(array: Array[Int]) : Array[Int] = { val (left, right) = array.partition(_ > 0) left ++ right } ``` 5、如何计算 `Array[Double]` 的平均值? ```scala def arrayAverage(array: Array[Double]) : Double = { array.sum / array.length } ``` 6、如何重新组织 `Array[Int]` 的元素将它们以反序排列?对于 `ArrayBuffer[Int]` 你又会怎么做呢? ```scala def reverseAverage(array: Array[Int]) : Array[Int] = { for (i <- array.indices if i < array.length / 2) { val temp = array(i) array(i) = array(array.length - i - 1) array(array.length - i - 1) = temp } array } ``` 对于 `ArrayBuffer` 如下 ```scala def reverseAverage(array: ArrayBuffer[Int]) : ArrayBuffer[Int] = { array.reverse } ``` 7、编写一段代码,产出数组中的所有值,去掉重复项。 ```scala def distinctAverage(array: Array[Int]) : Array[Int] = { array.distinct } ``` 8、创建一个由 `java.util.TimeZone.getAvailableIDs` 返回的时区集合,判断条件是它们在美洲。去掉 `"America/"` 前缀并排序。 ```scala val sortedAmericanZone = java.util.TimeZone.getAvailableIDs.filter(_.startsWith("America")).map(_.replaceFirst("America/", "")).sorted ``` 9、引入 `java.awt.datatransfer._` 并构建一个类型为 `SystemFlavorMap` 类型的对象: `val flavors = SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap]` 然后以 `DataFlavor.imageFlavor` 为参数调用 `getNativesForFlavor` 方法,以 Scala 缓冲保存返回值。 首先导入包 ```scala import java.awt.datatransfer._ import scala.collection.JavaConversions._ import scala.collection.mutable.Buffer ``` 然后编码 ```scala val flavors = SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap] val flavor: Buffer[String] = flavors.getNativesForFlavor(DataFlavor.imageFlavor) ```