Scala infinite while loop even though condition changed to false -


import scala.collection.mutable.arraybuffer  object namelist {     val names = arraybuffer("placeholder") }  class robot {   val r = scala.util.random   val letters = 'a' 'z'   val name = {     val initname = namelist.names(0)     while(namelist.names.contains(initname)){         val initname = letters(r.nextint(26)).tostring + letters(r.nextint(26)).tostring + r.nextint(10).tostring + r.nextint(10).tostring + r.nextint(10).tostring         println("while", initname)         println("while", namelist.names)         println("checker", namelist.names.contains(initname))     }     println("outside", namelist.names)     namelist.names += initname     initname   } } 

outputs

(while,la079) (while,arraybuffer(placeholder)) (checker,false) (while,io176) (while,arraybuffer(placeholder)) (checker,false) 

the while loop runs indefinitely, above output snippet. why isn't while loop exiting though condition changed false?

big picture, need ensure each robot instance has unique name--i'm open alternatives using while loop.

update: per jason c, below code fixes reassignment problem:

var initname = namelist.names(0)     while(namelist.names.contains(initname) == true){         initname = letters(r.nextint(26)).tostring + letters(r.nextint(26)).tostring + r.nextint(10).tostring + r.nextint(10).tostring + r.nextint(10).tostring 

it's because in loop:

val initname = ... while(namelist.names.contains(initname)){     val initname = ...     ... } 

you redeclare val initname in loop. have 2 different values. 1 in while condition outer scoped one. 1 declared in loop has no effect on it.

i don't know scala what difference between var , val definition in scala? i'm guessing solution change outer 1 var (so it's modifiable) , drop val entirely inner 1 (so you're not redeclaring it).


Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -