我有一个应该返回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
答案 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()
。但也许你有一个工作代码,你可以按照自己的方式去做。我已经测试过了。
;
结束每一行
str
答案 1 :(得分:0)
你有几个问题,一个是你的Long文字。 Random.nextInt方法需要一个Int参数,但往返是Long,所以它们的绝对差异也是如此。 如果你碰巧知道差异适合Int,你可以使用显式转换将结果强制转换为Int。
当您在代码中键入一个数字时,它被解释为一个Int,但代码中的数字太大而不能成为一个Int,因此您必须在每个数字上加上一个“L”后缀(小写l也适用)。
作为旁注,多个返回语句被认为是不良形式,并且是不必要的。我会删除两个return语句并添加一个else 在第二种方法中,您可以删除最后一个return语句以及val赋值。