2015-07-11 29 views
2

所以我正在創建一個程序,使this項目的迴文數字。我的程序適用於較小的數字,但整數只能計算少量的數字,所以我將必要的整數更改爲BigInteger()。這樣做後,我遇到了一些我不太確定的問題。有沒有人有任何建議,如何使這項工作?切換到BigInteger和PROGAM不再運行

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);