So I just started learning Scala this afternoon and quickly came to a stopping point with such exception when trying to run my program with standard scalac Sqrt.scala
and scala Sqrt
:
java.lang.NoSuchMethodException: Sqrt.main is not static
at scala.reflect.internal.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:68)
at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:101)
at scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:22)
at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:39)
at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:29)
at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:39)
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:65)
at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:87)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:98)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:103)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
Here's the code of my Sqrt.scala:
class Sqrt {
val PRECISION = 0.01
def abs(d: Double): Double =
if (d >= 0) d else -d
def isCloseEnough(guess: Double, x: Double): Boolean =
abs(guess * guess - x) < PRECISION
def improve(guess: Double, x: Double): Double =
(x/guess + guess)/2
def iter(guess: Double, x: Double): Double =
if(isCloseEnough(guess, x)) guess
else iter(improve(guess, x), x)
def sqrt(x: Double): Double =
iter(1, x)
def main(args: Array[String]) {
println(sqrt(16))
}
}
Can anyone come up with an explanation?