第二章课后习题
2-1
选D
D项错在元组可以定义多个元素,通过(x,x,x,…)
2-2
选A
A错在 元组的访问方式是 x._1来访问元组中的第一个元素。注意是从下标1开始的,数组是从下标0开始的。
2-3
这里的意思应该是说用var和val的区别:
val声明一个变量时,必须赋初始值,并且后续操作不能修改其值。而var声明的变量可以重复使用,任意修改,并且以最后一次修改的值为准。
如上,不初始化报错;
如上,初始化后修改值报错。
关于书上讲到的var声明变量可以不初始化,我试验是错的。
2-4
val nums = List(1,7,9,8,0,3,5,4,6,2)
val res = nums.map(x => x*10)
2-5
def judge(num:Int) ={ if (num > 0 ) 1 else if(num < 0 ) -1 else 0 }
2-6
for(num <-100 until 1000){ val a = num /100;val b = num /10 %10;val c = num % 10; val temp = a*a*a + b*b*b + c*c*c; if(num == temp) printf(" %d",num)}
//153 370 371 407
2-7
class vectorfunc(a:Int,b:Int,c:Int){
var a1 = a;var b1 = b;var c1 = c;
def add(aa:Int,bb:Int,cc:Int) ={
a1 += aa; b1 += bb; c1 += cc
printf("(%d,",a1);printf("%d,",b1);printf("%d)",c1)
}
}
new vectorfunc(1,2,3).add(4,5,6)
//减法类似
//标量乘法我理解为一个数乘以向量的每一个数,实现过程类似
2-8
val s = "Hello"
var res:Long = 1;
for(i <- s){ res = res * i.toLong}//toLong是转化为Long类型
print(res) //这里是写死的。可以定义函数传参,如下:
def sum(s:String) = {
var res:Long = 1;
for( i <- s)
res = res*i.toLong
print(res)
}