我是scala的新手。
这里是简单的代码
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
Main $ .main(SimpleIfSatementDemo.scala:5)at Main.main(SimpleIfSatementDemo.scala)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at 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) 在scala.tools.nsc.ObjectRunner $ .run(ObjectRunner.scala:33)at at scala.tools.nsc.ObjectRunner $ .runAndCatch(ObjectRunner.scala:40)at at scala.tools.nsc.ScriptRunner.scala $工具$ 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:131) 在 scala.tools.nsc.ScriptRunner $$ anonfun $ withCompiledScript $ 1.适用(ScriptRunner.scala:131) 在scala.tools.nsc.util.package $ .waitingForThreads(package.scala:26) 在 scala.tools.nsc.ScriptRunner.withCompiledScript(ScriptRunner.scala:130) 在scala.tools.nsc.ScriptRunner.runScript(ScriptRunner.scala:188)at at 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) 在scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
感谢
答案 0 :(得分:7)
程序没有传递足够的参数(它至少需要两个;请参阅the java command manual了解如何指定这些参数)。考虑将此代码作为main方法的第一行:
println("I have " + args.length + " argument(s)")
然后在Scala 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包含传递和使用参数的示例。
答案 1 :(得分:5)
假设您使用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中运行,则必须弄清楚如何编辑运行配置以向运行命令添加参数。