Scala - 线程“main”java.lang.NumberFormatException中的异常

时间:2014-05-06 17:12:58

标签: scala

我已经看到了关于此的其他线索,但他们都没有回答我的问题。事实上,我认为在我的情况下,问题与其他问题不同。

以下是我尝试解决的问题的链接:http://projecteuler.net/problem=55

我确信算法是正确的,但我怀疑Scala可以将其转换为字符串。我不知道。这是我的代码:

package projecteuler55

object PE55 extends App {



 def rev ( x :BigInt) : BigInt = {
  x.toString.reverse.toInt 
 }



 def notPalindrome ( x:BigInt) : Boolean = { 
   if ( x != rev(x) ) true else false
 }

 def test (x:BigInt , steps:Int) : Boolean = {

    if ( steps > 50 ) true
    else if (notPalindrome(x) == false) false
    else test ( x + rev(x) , steps +1)
   } 

 var lychrel = 0
 for (i<-10 until 10000){
   if (test(i+rev(i),0)) lychrel += 1
 }
 println(lychrel)

}

我得到的错误是:

Exception in thread "main" java.lang.NumberFormatException: For input string: "2284457131"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:495)
    at java.lang.Integer.parseInt(Integer.java:527)
    at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:229)
    at scala.collection.immutable.StringOps.toInt(StringOps.scala:31)
    at projecteuler55.PE55$.rev(PE55.scala:8)
    at projecteuler55.PE55$.notPalindrome(PE55.scala:14)
    at projecteuler55.PE55$.test(PE55.scala:20)
    at projecteuler55.PE55$$anonfun$1.apply$mcVI$sp(PE55.scala:26)
    at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:141)
    at projecteuler55.PE55$delayedInit$body.apply(PE55.scala:25)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
    at scala.App$class.main(App.scala:71)
    at projecteuler55.PE55$.main(PE55.scala:3)
    at projecteuler55.PE55.main(PE55.scala)

为什么会这样?如果发生溢出,我也会使用BigInt,但这似乎没有帮助。

提前致谢

1 个答案:

答案 0 :(得分:3)

toInt期望一个可以解析的字符串适合常规Int,而2284457131则不能。您想使用BigInt(x.toString.reverse)