类型不匹配;发现:需要很长时间:Int

时间:2016-04-02 11:00:49

标签: scala

我有一个应该返回Long的方法。 但我得到一个错误:
**type mismatch; found : Long required: Int**

以下是方法:

def getRandom_IMEI(from : Long,to : Long) : Long = {
    if (from < to)
        return from + new scala.util.Random().nextInt(Math.abs(to - from));
    return from - new scala.util.Random().nextInt(Math.abs(to - from));
   }

当我像这样调用这个方法时:

def IMEI() : String ={
    var str: String =""
    var rand:Long = 0
    rand = functest.getRandom_IMEI(350000000000000,355000000000000)  //error
    str=rand.toString()
    return str
  }

我有这个错误:

    Multiple markers at this line:
        ◾integer number too large
        ◾integer number too large

2 个答案:

答案 0 :(得分:1)

不确定你的目标是什么,我的眼睛抓住了一些东西。

在您编写时,错误与以下行:

rand = functest.getRandom_IMEI(350000000000000,355000000000000)  //error

你需要通过在长号末尾添加L来延长它。

rand = functest.getRandom_IMEI(350000000000000L,355000000000000L)

但是你仍然可以清理你的IMEI()方法,所以它看起来像这样,不需要var而且你不需要声明str,因为你正在返回字符串:< / p>

def IMEI(): String = {
  val rand = getRandom_IMEI(355000000000000L, 350000000000000L)
  rand.toString
}
  

注意:通过在后面添加L或l后缀来指定long类型   litera(link

另一件事是你的getRandom_IMEI也不适合我,我做了一些简单的事情:

def getRandom_IMEI(from: Long, to: Long): Long = {
  if (from < to) {
    from + new scala.util.Random(to - from).nextLong()
  } else {
    from - new scala.util.Random(to - from).nextLong()
  }
}

由于我不了解您的最终目标,但您也可以使用nextInt()代替.nextLong()。但也许你有一个工作代码,你可以按照自己的方式去做。我已经测试过了。

  • 在Scala中的一般规则,您不需要像Java {/ li>那样以;结束每一行
  • 您不需要返回,它会自动返回最后一个语句,因此您可以轻松地从第二种方法中删除返回,并保持str

答案 1 :(得分:0)

你有几个问题,一个是你的Long文字。 Random.nextInt方法需要一个Int参数,但往返是Long,所以它们的绝对差异也是如此。 如果你碰巧知道差异适合Int,你可以使用显式转换将结果强制转换为Int。

当您在代码中键入一个数字时,它被解释为一个Int,但代码中的数字太大而不能成为一个Int,因此您必须在每个数字上加上一个“L”后缀(小写l也适用)。

作为旁注,多个返回语句被认为是不良形式,并且是不必要的。我会删除两个return语句并添加一个else 在第二种方法中,您可以删除最后一个return语句以及val赋值。