Ben*_*Ben 0 scala runtime-error
我是斯卡拉的新手.
这是简单的代码
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
它可以编译,但不能运行它.这是错误我得到了它
Run Code Online (Sandbox Code Playgroud)java.lang.ArrayIndexOutOfBoundsException: 0 at位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)的sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)的Main.main(SimpleIfSatementDemo.scala)主$ .main(SimpleIfSatementDemo.scala:5).在scala.tools.nsc.util.ScalaClassLoader $$ anonfun $ run $ 1.apply(ScalaClassLoader.)的java.lang.reflect.Method.invoke(Method.java:597)中反映.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25). scala:78)在scala.tools的scala.tools.nsc.util.ScalaClassLoader $ class.asContext(ScalaClassLoader.scala:24)scala.tools.nsc.util.ScalaClassLoader $ URLClassLoader.asContext(ScalaClassLoader.scala:88) .sc.util.ScalaClassLoader $ class.run(ScalaClassLoader.scala:78)at scala.tools.nsc.util.ScalaClassLoader $ URLClassLoader.run(ScalaClassLoader.scala:101)at scala.tools.nsc.ObjectRunner $ .run( ObjectRunner.scala:33)scala.tools.nsc.ObjectRunner $ .runAndCatch(ObjectRunner.scala:40)at scala.tools.nsc.ScriptRunner.scala $ tools $ nsc $ ScriptRunner $$ runCompiled (ScriptRunner.scala:171)scala.tools.nsc.ScriptRunner $$ anonfun $ runScript $ 1.apply(ScriptRunner.scala:188)at scala.tools.nsc.ScriptRunner $$ anonfun $ runScript $ 1.apply(ScriptRunner.scala :188)scala.tools.nsc.ScriptRunner $$ anonfun $ withCompiledScript $ 1.apply $ mcZ $ sp(ScriptRunner.scala:157)at scala.tools.nsc.ScriptRunner $$ anonfun $ withCompiledScript $ 1.apply(ScriptRunner.scala :131)scala.tools上的scala.tools.nsc.ScriptRunner $$ anonfun $ withCompiledScript $ 1.apply(ScriptRunner.scala:131)scala.tools.nsc.util.package $ .waitingForThreads(package.scala:26) .sc.ScriptRunner.withCompiledScript(ScriptRunner.scala:130)scala.tools.nsc.ScriptRunner.runScript(ScriptRunner.scala:188),位于scala的scala.tools.nsc.ScriptRunner.runScriptAndCatch(ScriptRunner.scala:201). tools.nsc.MainGenericRunner.runTarget $ 1(MainGenericRunner.scala:58)at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:80)at scala.tools.nsc.MainGenericRunner $ .main(MainGenericRunner.scala:89)在scala.tools.nsc.Ma inGenericRunner.main(MainGenericRunner.scala)
谢谢
小智 7
该程序没有传递足够的参数(它至少需要两个;请参阅java命令手册,了解如何指定这些参数).考虑将此代码作为main方法的第一行:
println("I have " + args.length + " argument(s)")
Run Code Online (Sandbox Code Playgroud)
然后在Scala REPL上尝试这个以查看类似的爆炸:
val a = Array("Hello world!") // array of one element
a(0) // access first element, okay
a(1) // access second element -- KABOOM!
Run Code Online (Sandbox Code Playgroud)
如何使用这些新知识使程序更健壮(而不是抛出异常)?
快乐的编码.
Scala的First Steps文章提供了传递和使用参数的示例.
假设您使用2.9.0或更高版本在命令行运行,并且您的源代码包含在名为的文件中SimpleIfStatementDemo.scala:
$ scala SimpleIfStatementDemo.scala 1 2
Run Code Online (Sandbox Code Playgroud)
将为您的程序提供参数1和2.
在2.9.x和2.8.x上,您还可以将源代码class编译为编译为JVM的中间字节代码的文件.一个好的做法是将它们放在子目录下(classes在本例中):
$ scalac -d classes SimpleIfStatementDemo.scala
$ scala -cp classes SimpleIfStatementDemo 1 2
Run Code Online (Sandbox Code Playgroud)
如果在IDE中运行,则必须弄清楚如何编辑运行配置以向run命令添加参数.