java反转字符串边界溢出

发布于 2022-09-06 07:29:27 字数 1154 浏览 20 评论 0

反转一个十进制数,正负数边界溢出报错,边界设定了,为什么还是溢出?

class Solution {
    public int reverse(int x) {
      
        String s=new StringBuffer(Math.abs(x)+"").reverse().toString();  
        Integer newValue = Integer.valueOf(s);  
        
        if(x>0){  
            if(newValue>Integer.MAX_VALUE ||newValue<Integer.MIN_VALUE){  
                return 0;  
            }else{  
                return (int) newValue;  
            }  
        }else{  
              
                return (int)(0-newValue);  
              
        }  
    }
}
public class MainClass {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = in.readLine()) != null) {
            int x = Integer.parseInt(line);
            
            int ret = new Solution().reverse(-2147483648);
            
            String out = String.valueOf(ret);
            
            System.out.print(out);
        }
    }
} 

错误:
Error:
Line 5: java.lang.NumberFormatException: For input string: "8463847412-"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

星軌x 2022-09-13 07:29:27

其实:

Math.abs(-2147483648) == -2147483648

很有意思吧?

水中月 2022-09-13 07:29:27

楼上说的没错。请查阅Math.abs()方法(参数为 int)的文档注释,片段如下:

Note that if the argument is equal to the value of Integer.MIN_VALUE, the most negative representable int value, the result is that same value, which is negative.

当方法的参数值等于 int 最小值时,结果为原值。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文