【问题标题】:trying to return integer in reverse (without recursion)试图反向返回整数(不递归)
【发布时间】:2017-10-24 03:06:08
【问题描述】:

我正在尝试打印给定整数的倒数。该函数必须接受一个整数并返回一个整数(没有递归或将每个数字单独打印为字符串)。这就是我所拥有的,但它不起作用:

class Solution {
public int reverse(int x) 
{
    String numStr = "";
    while (x > 0)
    {  
        numStr = numStr + Integer.toString(x % 10);
        x /= 10;
    }
    return Integer.parseInt(numStr);
}
}

我的 return 语句出现运行时错误。非常感谢任何帮助或建议!

【问题讨论】:

  • 运行时错误是什么?
  • 它:第 10 行:java.lang.NumberFormatException:对于输入字符串:“”
  • 异常是描述性的。这意味着您传递给Integer.parseInt() 的字符串是一个空字符串,即""。您是否将小于 1 的整数传递给 reverse()
  • 运行几次后我没有得到异常。你用什么作为输入?
  • 哦,这可能是问题所在 - 我不确定,因为我只是在练习 leetcode,但我不知道他们使用的所有值 - 谢谢!

标签: java runtime-error reverse parseint


【解决方案1】:

这里不需要String,只需将每个数字累加并将当前值乘以 10(右移)。另外,您的方法可以是static。喜欢,

public static int reverse(int x) {
    int r = 0;
    while (x > 0) {
        r = (r * 10) + (x % 10);
        x /= 10;
    }
    return r;
}

【讨论】:

    【解决方案2】:

    值 0 时出现错误。Java 无法将字符串 "" 解析为 int。将字符串值初始化为“0”。

    另一方面,您可以简化方法:

    class Solution {
            public int reverse(int x) 
            {
                String digitsChain = Integer.toString(x);           
                return Integer.valueOf(StringUtils.reverse(digitsChain));
            }
        }
    

    【讨论】:

      【解决方案3】:

      您错过了 x 为 0 的情况。如果 x 为 0,则字符串将为空。调用return Integer.parseInt(numStr)时,numStr为空字符串,会报错。

      所以,如果你添加一个 if 语句来检查边缘情况,应该没问题

          public static int reverse(int x) 
          {
              if(x == 0) return 0;
              String numStr = "";
              while (x > 0)
              {  
                  numStr = numStr + Integer.toString(x % 10);
                  x /= 10;
              }
              return Integer.parseInt(numStr);
          }
      

      【讨论】:

        【解决方案4】:
        class Solution {
            public static int reverse(int x)
            {
            String numStr = "";
            while (x > 0)
            {
                numStr = numStr + Integer.toString(x % 10);
                x /= 10;
            }
            return Integer.parseInt(numStr);
        }
        
        public static void main(String[] args) {
            int answer = reverse(12345);
            System.out.print(answer);
            }
        }
        

        我刚刚将您的方法设为静态,您的代码对我来说工作正常,并提供以下输出:

        54321 进程以退出代码 0 结束

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-15
          • 2013-07-05
          • 2017-01-12
          • 2015-10-22
          • 1970-01-01
          • 2012-09-21
          • 2016-06-30
          相关资源
          最近更新 更多