2015-07-11 2 views
2

Так что я создал программу, которая сделала палиндромные числа на основе проекта this. Моя программа будет работать для меньших чисел, но целое число может вычислять только небольшое количество чисел, поэтому я изменил необходимые целые числа на BigInteger(). После этого я столкнулся с некоторыми проблемами, на которые я действительно не уверен. Кто-нибудь будет советоваться о том, как сделать эту работу?Переключен на BigInteger и прогам уже не запускается

public class Main { 
public static final boolean DEBUG = false; 

public static void main(String[] args) {  
    Scanner input = new Scanner(System.in); 

    //gets the number from the console 
    int number = input.nextInt(); 
    if(DEBUG) System.out.println("Got your number!"); 
    if(DEBUG) System.out.println("Bout to makePalendrome!"); 

    makePalendrome(number); 
} 


public static boolean isPalendrome(BigInteger number){ 
    String numberString = number.toString(); 

    for(int i = 0; i < numberString.length(); i++){ 
     if(numberString.charAt(i) != numberString.charAt(numberString.length() - 1 - i)) return false; 
    }  
    return true; 
} 


public static void makePalendrome(int input){ 
    int steps = 0; 
    BigInteger number = new BigInteger((input + "")); 
    if(isPalendrome(number)) printResult(input, steps, number); 

    while(!isPalendrome(number)){ 
     String numberString = number.toString(); 
     String reversed = ""; 
     for(int i = 0; i < numberString.length(); i++){ 
      reversed += numberString.charAt(numberString.length() - 1 - i); 
     } 
     BigInteger numReversed = new BigInteger(reversed); 
     number.add(numReversed); 
     steps++; 
    } 

    printResult(input, steps, number); 
} 

public static void printResult(int number, int steps, BigInteger palendrome){ 
     System.out.printf("The number %d becomes palendromic after %d steps, and becomes the number: %d%n", number, steps, palendrome); 
     System.exit(0); 
    } 

} 
+1

Это один из тех редких случаев, когда это лучше всего использовать строку во всем. – Bathsheba

+0

Какова конкретная проблема? – kevcodez

+0

«После этого я столкнулся с некоторыми проблемами, которые я действительно не уверен» - какие проблемы? Также старайтесь избегать 'System.exit', это делает код трудно следовать. При необходимости выведите исключение. –

ответ

5

Ваш код переходит в бесконечный цикл while(!isPalendrome(number)) потому,

number.add(numReversed); 

это не меняет значение number. Вам нужно назначить его обратно.

number= number.add(numReversed);

Смежные вопросы