yufan.me/content/posts/2016/2016-11-16-a-scala-exercise-a-day-1.mdx
2024-06-14 02:13:47 +08:00

117 lines
3.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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)
```