【问题标题】:type mismatch; found : Long required: Int类型不匹配;发现:长要求:Int
【发布时间】:2023-03-26 01:34:01
【问题描述】:

我有一个应该返回 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

【问题讨论】:

  • 在您的 IMEI 功能中使用 val 而不是 var - 您只需分配一次。

标签: scala


【解决方案1】:

在不确定你的目标是什么的情况下,我的眼睛会紧跟着事情。

在你写的时候,下面这行出错了:

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

您需要在长号末尾添加L 使其变长。

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

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

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

注意:long 类型是通过将 L 或 l 后缀附加到 文学(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 一样以 ; 结束每一行
  • 你不需要return,它会自动返回最后一条语句,所以你很容易从你的第二个方法中删除return,只保留str

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-12
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      相关资源
      最近更新 更多