1. 编写一段代码,将a设置为一个n个随机数的数组,要求随机数介于0(包含)和n(不包含)之间。

//import java.lang.Math
def getArray(n:Int)={
  val nums = new Array[Int](n)
  for(i <- 0 until nums.length){
    nums(i) = (Math.random() * n).toInt 
  }
  nums
}
  
getArray(10)
//res18: Array[Int] = Array(5, 1, 6, 9, 0, 9, 6, 6, 8, 1)
 
 
方法二:
object App{
  def main(args: Array[String]){
    makeArr(10).foreach(println)
  }
  def makeArr(n:Int): Array[Int]={
    val = new Array[Int](n)
    val rand = new scala.util.Random()
    for(i <- a) yield rand.nextInt(n)
  }
}
2. 编写一个循环,将整数数组中相邻的元素置换。例如,Array(1,2,3,4,5)经过置换后变为Array(2,1,4,3,5)。
object App{
  def main(args: Array[String]){
    val = Array(1,2,3,4,5)
    exchangeArr(a).foreach(println)
  }
  def exchangeArr(a:Array[Int]):Array[Int]={
    for(i <- 0 until a.length){
      if(i % 2 == 0 && i != a.length -1){
        val = a(i)
        a(i) = a(i+1)
        a(i+1= t
      }
    }
    a
  }
}
 
3. 重复前一个练习,不过这一次生成一个新的值交换过的数组。用for/yield。
object App{
  def main(args: Array[String]){
    val = Array(1,2,3,4,5)
    val = revertYield(a)
    a.foreach(println)
    println
    b.foreach(println)
  }
  def revertYield(arr:Array[Int])={
    for(i <- 0 until arr.length) yield {
      if(i % 2 == 0 && i != arr.length -1){
        arr(i+1)
      }else if(i % 2 == 1 && i != arr.length -1){
        arr(i-1)
      }else if(i % 2 == 0 && i == arr.length -1){
        arr(i)
      }else{
        arr(i-1)
      }
    }
  }
}
 
4. 给定一个整数数组,产出一个新的数组,包含原数组中的所有正值,以原有顺序排列,之后的元素是所有零或负值,以原有顺序排列。
object App{
  def main(args: Array[String]){
    val = Array(1,2,-3,-4,5,0)
    sortArr(a).foreach(println)
  }
  def sortArr(arr:Array[Int])={
    val positiveIndexes = for(i <- 0 until arr.length if arr(i) >0 yield i
    val nonpositiveIndexes = for(i <- 0 until arr.length if arr(i) <= 0yield i
    val newArr = new Array[Int](arr.length)
    for(i <- 0 until arr.length){
      if(i < positiveIndexes.length) newArr(i) = arr(positiveIndexes(i))
      else newArr(i) = arr(nonpositiveIndexes(i - positiveIndexes.length))
    }
    newArr
  }
}
 
5. 如何计算Array[Double]的平均值?
object App{
  def main(args: Array[String]){
    val = Array(1,2.0,-3,-4,5,0)
    println(average(a).toString)
  }
  def average(arr:Array[Double])={
    arr.sum/arr.length
  }
}
//result: 0.16666666666666666
 
6. 如何重新组织Array[Int]的元素将它们以反序排列?对于ArrayBuffer[Int]你又会怎么做呢?
object App{
  def main(args: Array[String]){
    val = Array(1,2,-3,-4,5)
    println(a.mkString("[",",","]"))
    println(reverseArray(a).mkString("[",",","]"))
  }
  def reverseArray(arr:Array[Int])={
    for(i <- 0 until arr.length/2){
        val = arr(arr.length-1-i)
        arr(arr.length-1-i) = arr(i) 
        arr(i) = t
    }
    arr
  }
}
/*result: 
[1,2,-3,-4,5]
[5,-4,-3,2,1]
*/
 
ArrayBuffer的版本几乎和Array的版本一样。
 
import scala.collection.mutable.ArrayBuffer
object App{
  def main(args: Array[String]){
    val = ArrayBuffer(1,2,-3,-4,5)
    println(a.mkString("[",",","]"))
    println(reverseArray(a).mkString("[",",","]"))
  }
  def reverseArray(arr:ArrayBuffer[Int])={
    for(i <- 0 until arr.length/2){
        val = arr(arr.length-1-i)
        arr(arr.length-1-i) = arr(i) 
        arr(i) = t
    }
    arr
  }
}
/*result: 
[1,2,-3,-4,5]
[5,-4,-3,2,1]
*/
 
7. 编写一段代码,产出数组中的所有值,去掉重复项。(提示:查看Scaladoc)
object App{
  def main(args: Array[String]){
    val = Array(6,2,2,6,7,5,2)
    println(a.mkString("[",",","]"))
    val = a.distinct
    println(b.mkString("[",",","]"))
  }
}
/*result: 
[6,2,2,6,7,5,2]
[6,2,7,5]
*/
 
8. 重新编写3.4节结尾的示例。收集负值元素的下标,反序,去掉最后一个下标,然后对每一个下标调用a.remove(i)。比较这样做的效率和3.4节中另外两种方法的效率。
import scala.collection.mutable.ArrayBuffer
object App{
  def main(args: Array[String]){
    var = ArrayBuffer(1,-2,3,-4,5,-6,7)
    println(a.mkString("[",",","]"))
    var begin = System.currentTimeMillis()
    var = ridAllNegativeButFirstA(a)
    var end = System.currentTimeMillis()
    println(end-begin)
    println(b.mkString("[",",","]"))
    println
     
    = ArrayBuffer(1,-2,3,-4,5,-6,7)
    println(a.mkString("[",",","]"))
    begin = System.currentTimeMillis()
    = ridAllNegativeButFirstB(a)
    end = System.currentTimeMillis()
    println(end-begin)
    println(b.mkString("[",",","]"))
    println
     
    = ArrayBuffer(1,-2,3,-4,5,-6,7)
    println(a.mkString("[",",","]"))
    begin = System.currentTimeMillis()
    = ridAllNegativeButFirstC(a)
    end = System.currentTimeMillis()
    println(end-begin)
    println(b.mkString("[",",","]"))   
  }
  def ridAllNegativeButFirstA(a:ArrayBuffer[Int])={
    var first = true
    var = a.length
    var = 0
    while(i < n){
      if(a(i) >= 0) i += 1
      else{
        if(first) { first = false; i += 1 }
        else { a.remove(i); n -= 1 }
      }
    }
    a
  }
   def ridAllNegativeButFirstB(a:ArrayBuffer[Int])={
    var first = true
    val indexes = for(i <- 0 until a.length if first || a(i) >= 0yield {
        if (a(i) < 0) first = false; i
    }
    for(j <- 0 until indexes.length) a(j) = a(indexes(j))
    a.trimEnd(a.length - indexes.length)
    a
  }
   
   def ridAllNegativeButFirstC(a:ArrayBuffer[Int])={
    val indexes = for(i <- 0 until a.length if a(i) < 0yield i
    val seq = indexes.reverse.dropRight(1)
    for(i <- 0 until seq.length) a.remove(i)
    a
  }  
}
/*result: 
[1,-2,3,-4,5,-6,7]
5
[1,-2,3,5,7]
 
[1,-2,3,-4,5,-6,7]
4
[1,-2,3,5,7]
 
[1,-2,3,-4,5,-6,7]
3
[-2,-4,5,-6,7]
*/
 
9. 创建一个由java.util.TimeZone.getAvailableIDs返回的时区集合,判断条件是它们在美洲。去掉"America/"前缀并排序。
import scala.collection.mutable.ArrayBuffer
import java.util.TimeZone
object App{
  def main(args: Array[String]){
    val = TimeZone.getAvailableIDs()
    val = a.filter(_.startsWith("America/"))
    for(i <- 0 until b.length) b(i) = b(i).replace("America/","")
    b.foreach(println) 
  }
}
/*result: 
Adak
Anchorage
Anguilla
Antigua
...
*/
 
10. 引入java.awt.datatransfer._并构建一个类型为SystemFlavorMap类型的对象:
val flavors = SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap]
然后以DataFlavor.imageFlavor为参数调用getNativesForFlavor方法, 以Scala缓冲保存返回值。
(为什么用这样一个晦涩难懂的类?因为在Java标准类库中很难找得到使用java.util.List的代码。)
import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.mutable.Buffer
import java.awt.datatransfer._
 
import java.util.TimeZone
object App{
  def main(args: Array[String]){
    val flavors = SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap]
    val buffer = flavors.getNativesForFlavor(DataFlavor.imageFlavor)
    println(buffer)
  }
}
/*result
[PNG, JFIF, DIB, ENHMETAFILE, METAFILEPICT]
*/
 

Ch03 数组相关操作 - 练习的更多相关文章

  1. Scala学习(三)----数组相关操作

    数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...

  2. 快学Scala习题解答—第三章 数组相关操作

    3 数组相关操作  3.1 编写一段代码.将a设置为一个n个随机整数的数组,要求随机数介于0(包括)和n(不包括)之间  random和yield的使用 import scala.math.rando ...

  3. scala 入门(2)--数组相关操作

    scala 无论从数组的定义还是操作方面来说都跟java非常相似,但又有其独特的强大之处… 1. 定长数组 对于长度不变的数组,可以用scala中的Array. //scala 里使用new实例化对象 ...

  4. 快学Scala-第三章 数组相关操作

    知识点: 1.定长数组 Array val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new Array[String](10) / ...

  5. 【php】php数组相关操作函数片段

    下面这些都是我在工作中用到的函数,现在整理下. 判断是否是一个数组 function _is_array($value){ if (is_array($value)) { return true; } ...

  6. linux awk数组相关操作介绍

    用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算又会怎么样呢.我们先看下以下的一些介绍,结合样例我们会解说下它的不同之处.在 awk 中数组叫做关联数组(assoc ...

  7. Shell数组相关操作

    参考:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html 创建数组 a=( ) 获得数组长度 ${#a[@]} #${#变量} ...

  8. Javascript 数组相关操作

    数组排序问题: sort() arr.sort() 可以直接进行排序,但是排序的方式是按unicode 顺序而来,比如1,1000,200,这个顺序不是我们想要的结果: 所以有了另一种方法,针对num ...

  9. Scala学习三——数组相关操作

    一.若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer 固定长度数组: 如val nums=new Array[Int](10) //10个整型数组,所有元素初始化为0; val ...

随机推荐

  1. 20款最好的JavaScript开发框架

    JavaScript语言有多种方式,创建交互式网站,Web应用程序.基本的JavaScript框架是预先写好的JavaScript代码集.这些JavaScript框架也被称为JavaScript库,开 ...

  2. Git Pro深入浅出(三)

    七.自己定义Git 前面已经阐述了Git基本的运作机制和使用方式,介绍了很多Git提供的工具来帮助你简单且有效地使用它.本部分将演示怎样借助Git的一些重要的配置方法和钩子机制,来满足自己定义的需求. ...

  3. ASCII码与unicode字符集

    问题1:为什么需要字符ASCII码.unicode码等等???它们到底有什么作用? 首先要明白一个事实:在计算机中只能用一系列存储着的0和1,当我们把一个字符存放在计算机时,我们是如何表示常用的字符呢 ...

  4. 同时安装anaconda2和anaconda3

    安装的过程请参考 Ubuntu14.04下同时安装Anaconda2与Anaconda3 启动的时候cd到$HOME/anaconda2/envs/py3k/bin下 source activate ...

  5. 直播框架ijkplayer

    直播框架ijkplayer [如何快速的开发一个完整的iOS直播app](播放篇) ijkplayer ios项目集成(图文详细版) 一步步搭建视频直播系统,基于LFLiveKit+ijkplayer ...

  6. Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框

    Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框 Jquery EasyUI Combotree单选框,Jquery EasyUI Combotree只能选择叶子节点 ...

  7. Serv-u 备份处理

    需求分析 从删库到跑路,大家听过很多,但如果没删备份的话,那只能说玩的不够彻底,不专业.系统管理员一个非常重要的职责就是定期备份,以便在系统出现故障的时候能够及时恢复.我们来看下如何备份Serv-u系 ...

  8. Enterprise Craftsmanship

    转自:http://enterprisecraftsmanship.com/2015/04/13/dto-vs-value-object-vs-poco/ DTO vs Value Object vs ...

  9. Linux ReviewBoard安装与配置

    目录 0. 引言 1. 安装步骤 2. 配置站点 2.1 创建数据库 2.2 开始安装 2.3 修改文件访问权限 2.4 Web服务器配置 2.5 修改django相关配置 正文 回到顶部 0. 引言 ...

  10. Solve Error: Library not loaded: @rpath/RoutingHTTPServer.framework/RoutingHTTPServer

    在配置WebDriverAgent的时候,可能会遇到如下的错误: 2018-01-04 09:53:42.759370-0600 WebDriverAgentRunner-Runner[318:133 ...