-1

我一直在试图找出一种方法来反转scala中的整数(例如1932-> 2391),而无需转换为字符串并且以纯粹的功能方式。我的目标是通过转换为 List 然后仅使用 List().reverse 然后转换回 Int 来反转 Int。

    def reverseIntList(x: Int) : List[Int] = {
      if (!(x <= 0))
        if ((x > 0) && (x < 10))
          x
        else
          (x % 10) :: reverseIntList(x / 10) :: Nil

      else
       List()
     }

但是,我只得到这个错误代码:递归方法 reverseIntList 需要结果类型

4

2 回答 2

3

首先unfold()它,然后fold()它备份。不需要.reverse

def reverseInt(x: Int): Int =
  List.unfold(x)(n => Option.when(n > 0)((n%10,n/10)))
      .fold(0)(_ * 10 + _)
于 2021-06-22T04:36:46.033 回答
1

您将返回 Int 而不是 List[Int] 作为第一个条件。

此外,还有一些适用于您的代码的增强功能。

  • 在这种情况下,不需要“:: Nil”来构建您的列表。
  • 不需要“(x > 0)”条件,因为它已经由您的第一个 if 验证。

它应该看起来像这样。

 def reverseIntList(x: Int): List[Int]  = {
    if (!(x <= 0))
      if ((x < 10))
        List(x)
      else
        x % 10 :: reverseIntList(x / 10)
    else
      List()
  }
于 2021-06-22T04:21:55.563 回答