我正在尝试使用A类中的对象将每个actor的不同值分配给示例类中的变量“file”。
class A{
var a1=new Array[example](2)
def starting()= {
for(i <- 0 to 3){
if(i==0){
a1(i).file="L1.txt";
}
else if(i==1){
a1(i).file="L2.txt";
}
a1(i).start
}
}
}
class example extends Actor {
var file="default.txt"
var Handle = new A
def act()= {
loop{
var count=0
react{
//remaining code
}
}
}
这会抛出与行相对应的nullpointerexception:
for(i <- 0 to 3){
if(i==0){
a1(i).file="L1.txt";
}
我是scala的初学者..我不知道怎么也找不到这个例外的原因。请帮忙。
答案 0 :(得分:4)
var a1=new Array[example](2)
创建具有2个空值的新数组,因此a1(i)
为空。
使用var a1 = IndexedSeq.fill(2){ new example }
非主题:
此类内容有Code Review,但您的代码不是scala方式。尝试重写它。
例如:
scala> import actors.Actor._
import actors.Actor._
scala> val as = for ( fileName <- Seq("L1.txt", "L2.txt") )
| yield actor {
| var count = 0
| loop {
| receive {
| case t =>
| count += 1
| println(fileName + " " + count + " " + t)
| }
| }
| }
as: Seq[scala.actors.Actor] = List(scala.actors.Actor$$anon$1@ef82188, scala.actors.Actor$$anon$1@44616f65)
scala> as.foreach{ _ ! 's }
L2.txt 1 's
L1.txt 1 's
答案 1 :(得分:1)
除了@senia已经诊断出来之外,你正在分配一个包含2个元素的数组,然后尝试迭代它的4个元素:
for(i <- 0 to 3){
肯定会产生ArrayIndexOutOfBoundsException
一次i
变成2.循环条件应为for(i <- 0 to 1)
或for(i <- 0 until 2)
才能生效。虽然确实有更好的Scala-ish方法来实现它。
答案 2 :(得分:0)
可能没有找到“L1.txt”文件!