我刚刚开始学习Scala。我想要通过循环添加数字,并想找出最小数字。所以,我做了这个
for(j<-0 until numberOfQuery){
val z = readLine.split(" ");
var from = Integer.parseInt(z(0));
var to = Integer.parseInt(z(1));
var i=from;
var getNumber = List[Int](to+1);
var counter = 0;
for(i <-from until to+1){
getNumber.apply(storeElemets(i));
System.out.println(storeElemets(i));
}
System.out.println(getNumber.min);
}对于输入10 20 30 40 11 22 33 44 15 5和0 5,最小数字将是10。但是,它返回java.lang.IndexOutOfBoundsException。所以,
1)在Scala中声明List的正确方法是什么? 2)我的错误是什么?什么是正确的数字加法?
发布于 2014-02-14 18:20:52
在人们注意到的其他问题之上(可变性与不可变性,分号,不知道storeElemets做了什么,等等)您还选择了一些模棱两可且难以理解的值名称,这些名称与常用术语冲突,从而使代码难以阅读。
从字里行间看起来,storeElemets就是你所谓的“输入”。
我的观点是这样的:
val storeElemets = IndexedSeq(10,20,30,40,11,22,33,44,15,5) //immutable
for(qry <- 0 until numberOfQuery) {
val elems = readLne split " " //split into an array
val Array(start, end) = elems take 2 map (_.toInt) //pattern matching
val stored = (start to end) map storeElemets //also immutable
//alternatively, this is more efficient in *most* cases...
val stored = storeElemets drop start take (end-start+1)
//println is a *side effect*, so we want to isolate it from the other logic
stored foreach println
println(stored.min)
}https://stackoverflow.com/questions/21773799
复制相似问题