2012-12-12 26 views
0

我想使用它的對象類A.NullPointerException異常......摸不清

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

我在斯卡拉初學者..我不知何故,我無法弄清楚這個異常的原因。請幫忙。

+0

'loop {var count = 0 ...'在每次迭代中創建一個新的計數器。使用'var count = 0;循環{...' – senia

回答

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([email protected], [email protected]) 

scala> as.foreach{ _ ! 's } 
L2.txt 1 's 
L1.txt 1 's 
1

除了什麼@senia已經確診,你是分配2個元素的數組,然後試圖通過它的4個元素進行迭代:

for(i <- 0 to 3){ 

這是肯定會產生ArrayIndexOutOfBoundsException一旦i成爲2.循環條件應爲for(i <- 0 to 1)for(i <- 0 until 2)這個工作。雖然確實有更好的,更多的斯卡拉方法來實現這一點。