Scala快速入门--For循环和函数

简介:

   Scala输入输出

   Scala函数

    循环

1. 输入和输出

scala> println("Hello, %s! You are %d years old.\n ","Scala",21)

(Hello, %s! You are %d years old.

 ,Scala,21)

可以使用readLine函数从控制台读取一行输入,

scala> val name = readLine("Please enter your QQ number: ")

Please enter your QQ number: name: String = 123456

如果你想读取数字,Boolean或者是字符也可以使用

readInt,readDouble等等。

scala> val name = readLine("Please enter your QQ number: ")

Please enter your QQ number: name: String = 123456

 

2. 循环

如下的表达式中的 <-的作用是将1 to n生成的range集合中的值提取出来,然后依次赋值给i

    for(i <- 1 to n)

       x = 1 + i

Scala中的break用法:

import scala.util.control.Breaks._

  def f1():Any = {

    for(i <- 1 to 10)

      {

        i

        break;

      }

  }

使用Breaks对象中的break方法。

3. For高级特性

 for(i <- 1 to 3 if i != 2)i

for的后面加上判断语句,过滤掉不需要的值,注意if之前没有分号

 

如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集合中的一个值。

scala> for(i <- 1 to 10) yield i%3

res1: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)

 

4. 函数

定义函数必须给出函数的名称,参数,和函数体

 def abs(x : Double) = if(x >= 0x else -x 

只要函数不是递归的,你就不需要指定返回类型,Scala编译器可以通过=符号右边的表达式的类型推断出返回类型。

 

在实际的开发过程中,可能需要一下传入大量的值,这时候我们就可以如下做:

 def sum(args: Int*) = {

   var result = 0

   for ( arg <- argsresult += arg

   result

 }

 val s = sum(1,2,3,4,5,5) //这样调用

现在,如果我们想这样传入参数 sum(1 to 10)怎么办?

val s = sum(1 to 5: _*)//在5后面追加 : _*

: _* 就可以将1 to 5转化成参数序列

5. 过程

如果函数体包含在花括号当中,但没有前面的=号,那么返回类型就是Unit,这样 函数就被称为过程。过程返回值,

def abc() {....}

 

练习:

移除一个数组中第一个负数后的所有负数

代码:

import scala.collection.mutable._

import scala.util.control.Breaks._

class ArrayMinusDelete {

  val b = ArrayBuffer(12,-3,4,-6,-7,-8,23,13)

  for(i <- 0 until b.length if(b(i< 0)) 

  {

    for(j <- i+1 until b.length if(b(j< 0))

    {

      b.remove(j)

    }

    break

  }

}

打印结果:

scala> b

res6: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(12, -3, 4, 23, 13)

你可能感兴趣的:(Scala快速入门--For循环和函数)