0

我正在尝试使用类 A 中的对象为示例类中的变量“文件”为每个参与者分配不同的值。

    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
    }
  }
 }

这是抛出对应于行的空指针异常:

for(i <- 0 to 3){

          if(i==0){
            a1(i).file="L1.txt"; 
          }

我是scala的初学者..我不知何故无法弄清楚这个异常的原因。请帮忙。

4

3 回答 3

4

var a1=new Array[example](2)创建具有 2 个空值的新数组,空值a1(i)也是如此。

利用var a1 = IndexedSeq.fill(2){ new example }

无关:

此类事情有代码审查,但您的代码不是 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
于 2012-12-12T08:08:39.623 回答
1

除了@senia 已经诊断的内容之外,您还分配了一个包含 2 个元素的数组,然后尝试遍历其中的 4 个元素:

for(i <- 0 to 3){

这肯定会产生ArrayIndexOutOfBoundsException一次i变成 2. 循环条件应该是for(i <- 0 to 1)for(i <- 0 until 2)为此工作。尽管确实有更好、更 Scala-ish 的方式来实现这一点。

于 2012-12-12T08:35:23.830 回答
0

可能找不到文件“L1.txt”!

阅读此 URL阅读 Scala 中的整个文件?

于 2012-12-12T08:06:01.993 回答