为了账号安全,请及时绑定邮箱和手机立即绑定

解析负整数时出现 NumberFormatException

解析负整数时出现 NumberFormatException

素胚勾勒不出你 2022-05-21 17:05:22
我正在编写一个 java 程序来确定一个数字是否是回文。如果传递的参数是正整数,我的代码可以正常工作,但在传递负整数时会抛出 NumberFormatException。Exception in thread "main" java.lang.NumberFormatException: For input string: ""    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)at java.base/java.lang.Integer.parseInt(Integer.java:662)at java.base/java.lang.Integer.parseInt(Integer.java:770)at com.stu.Main.isPalindrome(Main.java:28)at com.stu.Main.main(Main.java:7)我从另一个stackoverflow线程中获取了以下解决方案,这似乎是讲师希望我们使用的,但是在while循环中我假设由于负数始终小于0,它将跳出循环而不计算回文:public static int reverse(int number)        {              int result = 0;            int remainder;            while (number > 0)            {                remainder = number % 10;                number = number / 10;                result = result * 10 + remainder;            }            return result;        }所以,我在下面的解决方案中使用字符串来解决这个问题。注意:我们还没有进行拆分和正则表达式。public class Main {    public static void main(String[] args) {        isPalindrome(-1221); // throws exception        isPalindrome(707);   // works as expected - returns true        isPalindrome(11212); // works as expected - returns false        isPalindrome(123321);// works as expected - returns true    }    public static boolean isPalindrome(int number){        if(number < 10 && number > -10) {            return false;        }        String origNumber = String.valueOf(number);        String reverse = "";        while(number > 0) {            reverse += String.valueOf(number % 10);            number /= 10;        }}我在这里寻找两件事。首先,在讲师首选解决方案的情况下,如何解决while循环中的负数问题?其次,如何解决我的解决方案中的 NumberFormatException ?编辑:第三个问题。如果我从不解析回 int,为什么我的解决方案会返回 false?if(Integer.parseInt(origNumber) == Integer.parseInt(reverse)) // works到if(origNumber == reverse) // does not work谢谢!
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

好的,解决第一个和第二个问题的最简单方法就是使用删除负号,仅Math.abs(yourNumber)此而已。作为,


The java.lang.Math.abs() returns the absolute value of a given argument.


If the argument is not negative, the argument is returned.

If the argument is negative, the negation of the argument is returned.

这将解决您的第一个和第二个问题。


来到第三个,如果你没有转换回整数,你会得到错误的比较字符串,你需要使用equals()方法,


== tests for reference equality (whether they are the same object).

.equals() tests for value equality (whether they are logically "equal").

希望有帮助!!;)


查看完整回答
反对 回复 2022-05-21
  • 1 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信