2011-09-29 308 views
0

我是scala新手。導致此ArrayIndexOutOfBoundsException的原因是什麼?

這裏是簡單的代碼


object SimpleIfStatementDemo { 
    def main(args: Array[String]) { 
    var numA: Int = args(0).toInt 
    var numB: Int = args(1).toInt 
    if(numA>numB) { 
     print(numA) 
    } else { 
     print(numB)    
    } 
    } 
} 

它可以被編譯,但不能運行它。這裏是錯誤我得到它


java.lang.ArrayIndexOutOfBoundsException: 0 at 

主要$。主要(SimpleIfSatementDemo.scala:5) Main.main(SimpleIfSatementDemo.scala)在 sun.reflect.NativeMethodAccessorImpl.invoke0(母語方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java :597)at scala.tools。 nsc.util.ScalaClassLoader $$ anonfun $運行$ 1.適用(ScalaClassLoader.scala:78) 在 scala.tools.nsc.util.ScalaClassLoader $ class.asContext(ScalaClassLoader.scala:24) 在 scala.tools。 nsc.util.ScalaClassLoader $ URLClassLoader.asContext(ScalaClassLoader.scala:88) 在 scala.tools.nsc.util.ScalaClassLoader $ class.run(ScalaClassLoader.scala:78) 在 scala.tools.nsc.util。 ScalaClassLoader $ URLClassLoader.run(ScalaClassLoader.scala:101) at scala.tools.nsc.ObjectRunner $ .run(ObjectRunner.scala:33)at scala.tools.nsc.ObjectRunner $ .runAndCatch(ObjectRunner.scala:40)在 scala.tools.nsc.ScriptRunner.scala $ tools $ nsc $ ScriptRunner $$ runCompiled(ScriptRunner.scala:171) 在 scala.tools.nsc.ScriptRunner $$ anonfun $ $的runScript 1.適用(ScriptRunner.scala:188) 在 scala.tools.nsc.ScriptRunner $$ anonfun $ $的runScript 1.適用(ScriptRunner.scala:188) 在 scala.tools.nsc.ScriptRunner $$ anonfun $ withCompiledScript $ 1.適用$ MCZ $ SP(ScriptRunner.scala:157) 在 scala.tools.nsc.ScriptRunner $$ anonfun $ withCompiledScript $ 1.適用(ScriptRunner。 Scala.tools.nsc.util.package $ .waitingForThreads(package.scala:26)scala.tools.nsc.ScriptRunner $$ anonfun $ withCompiledScript $ 1.apply(ScriptRunner.scala:131) at scala.tools.nsc.ScriptRunner.withCompiledScript(ScriptR unner.scala:130) 在scala.tools.nsc.ScriptRunner.runScript(ScriptRunner.scala:188)在 scala.tools.nsc.ScriptRunner.runScriptAndCatch(ScriptRunner.scala:201) 在 scala.tools.nsc .MainGenericRunner.runTarget $ 1(MainGenericRunner.scala:58) 在 scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:80) 在 scala.tools.nsc.MainGenericRunner $。主要(MainGenericRunner.scala:89 ) at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner。斯卡拉)


感謝

回答

7

該計劃並沒有傳遞足夠的參數(它需要至少兩個;見the java command manual如何,這些可以被指定)。考慮把這個代碼的主要方法的第一行:

println("I have " + args.length + " argument(s)") 

再試試這斯卡拉REPL看到了類似的爆炸:

val a = Array("Hello world!") // array of one element 
a(0)  // access first element, okay 
a(1)  // access second element -- KABOOM! 

怎麼能這個新的知識被用來製造該程序更強大(而不是拋出異常)?

快樂編碼。


的製品First Steps to Scala具有傳遞和使用的參數的例子。

+0

謝謝隊友,但我嘗試我的代碼在Windows上,工作正常,我不知道爲什麼不在mac os x工作。謝謝 – Ben

4

假設你在使用2.9.0或更高版本的命令行和你的源代碼包含在一個名爲SimpleIfStatementDemo.scala文件運行:

$ scala SimpleIfStatementDemo.scala 1 2 

將提供論據1和2到你的程序。

在2.9.x和2.8.x上,您還可以將源文件編譯爲編譯爲JVM中間字節代碼的class文件。較好的做法是讓他們一個子目錄下(classes在這個例子中):

$ scalac -d classes SimpleIfStatementDemo.scala 
$ scala -cp classes SimpleIfStatementDemo 1 2 

如果您在IDE中運行,你必須弄清楚如何編輯運行配置參數添加到運行命令。

相關問題