简介:
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 >= 0) x else -x
只要函数不是递归的,你就不需要指定返回类型,Scala编译器可以通过=符号右边的表达式的类型推断出返回类型。
在实际的开发过程中,可能需要一下传入大量的值,这时候我们就可以如下做:
def sum(args: Int*) = {
var result = 0
for ( arg <- args) result += 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)