Я пишу 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;
}
if(Integer.parseInt(origNumber) == Integer.parseInt(reverse)) {
System.out.println("The original number was " + origNumber + " and the reverse is " + reverse);
System.out.println("Number is a palindrome!");
return true;
}
else
System.out.println("The original number was " + origNumber + " and the reverse is " + reverse);
System.out.println("Sorry, the number is NOT a palindrome!");
return false;
}
}
Я ищу две вещи здесь.
Во-первых, как мне решить проблему с отрицательным числом в цикле while в случае предпочтительного решения инструкторами?
Во-вторых, как я могу решить NumberFormatException в моем решении?
Редактировать: третий вопрос. Почему мое решение возвращает false, если я никогда не анализирую обратно в int?
if(Integer.parseInt(origNumber) == Integer.parseInt(reverse)) // works
* * 1022 до * * 1023
if(origNumber == reverse) // does not work
Спасибо!