【问题标题】:Error while attempting to reverse the digits of an integer尝试反转整数的数字时出错
【发布时间】:2017-04-08 05:09:54
【问题描述】:

我正在尝试将数字反转为 int 数字,但下面提供的代码返回错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "[null, null, null]"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Integer.parseInt(Integer.java:527)
    at Solution.reverseInteger(Solution.java:21)
    at Solution.main(Solution.java:30)

我知道应该有更简单的方法来回答这个问题,但我选择以我的方式回答。我一直在谷歌搜索,但我找不到任何相关的解决方案来解决我的问题。 谁能帮我吗?谢谢!

import java.util.*;

class Solution {

    /*
     * param number: A 3-digit number.
     * return: Reversed number.
     */

    public int reverseInteger(int number) {
        // write your code here
        if (number > 1000 || number < 100) {
            return -1;
        }
        String s = Integer.toString(number);
        char[] c = s.toCharArray();
        String[] b = new String[c.length];

        for (int i = s.length() - 1, j = 0; i <= 0; i--, j++) {
            b[j] = String.valueOf(c[i]);
        }
        String h = Arrays.toString(b);
        int y = Integer.parseInt(h);
        return y;
    }

    public static void main(String[] args) {
        Solution p = new Solution();
        int ff = p.reverseInteger(102);
        System.out.println(ff);

    }
}

【问题讨论】:

    标签: java


    【解决方案1】:

    问题在于您的for 循环。

    for (int i = s.length()-1,j =0;i <=0; ...)
    

    您将i 的值设置为

    int i = s.length()-1;
    

    但你的 for 循环只用于i &lt;=0,所以它永远不会被输入

    即使你有 b 数组,你也不能只将反转的数组字符串转换为 int - 添加下面的代码并查看。

        String h = Arrays.toString(b);
        System.out.println(h);
    

    尝试迭代 b 字符串数组

    【讨论】:

      【解决方案2】:

      这里实际上有两个问题。

      1. for 循环中的条件不正确。您从s.length()-1 开始并递减i,但您正在检查i &lt;= 0,它最初是false,这意味着您的循环永远不会执行。条件应为i &gt;= 0
      2. 在执行int y = Integer.parseInt(h); 时,您的h 实际上是数组的字符串表示形式,即[2, 0, 1](在更正for 循环之后)。有关更多详细信息,请参阅this related question

      我建议去掉 String[] 数组并改用 StringBuilder (尽量让它接近你自己的想法)。在这种情况下,您还可以去掉一些其他部分。

      见我的updated version:

      import java.util.*;
      
      class Solution {
          /*
           * param number: A 3-digit number.
           * return: Reversed number.
           */
          public int reverseInteger(int number) {
              // write your code here
              if (number > 1000 || number <100){
                  return -1;
              }
              String s = Integer.toString(number);
              char[] c = s.toCharArray();
              StringBuilder b = new StringBuilder(c.length);
      
              for (int i = s.length()-1; i >= 0; i--){
                  b.append(String.valueOf(c[i]));
              }
      
              int y = Integer.parseInt(b.toString());
              return y;
          }
      
          public static void main(String args[]) {
              Solution p = new Solution();
              int ff= p.reverseInteger(102);
              System.out.println(ff); // 201
          }
      }
      

      【讨论】:

      • 谢谢,你的回答真的很有帮助。
      猜你喜欢
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多