2016-07-20 59 views
1

我的程序應該採用隨機整數並將其逆轉。它目前適用於所有不超過十位數的正整數。將負數輸入到數字反轉程序中

import java.util.Scanner; 

public class Program2 { 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     int input; 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("Enter an integer: "); 
     input = scanner.nextInt(); 
     System.out.print("Its reversal is "); 
     reverse(input); 
     System.out.println();; 
    } 
    public static void reverse(int number) { 
     if(number < 10 && number > 0) { 
      System.out.println(number); 
      return; 
     } 
     else { 
      System.out.print(number % 10); 
      reverse(number/10); 
     } 
    } 
} 

我一直無法找到一種方法,讓程序返回負數的逆轉。什麼是最簡單的方法來做到這一點?

+2

所以你想在數字的末尾減號呢? – kai

+0

請提供輸入和預期輸出並描述「Trouble」 – Jens

+0

否,減號仍然會出現在前面 –

回答

7

根據上面的註釋,它看起來像你想-123的相反是-321。如果是的話,我想這個代碼應工作:

public static void reverse(int number) { 
    if (number < 0) { 
     System.out.print("-"); 
     reverse(number * -1); 
    } else if (number < 10) { 
     System.out.println(number); 
    } else { 
     System.out.print(number % 10); 
     reverse(number/10); 
    } 
} 

(我放棄了&& number > 0,因爲你有一個無限循環,如果輸入的是完全0。)


注:此代碼會給出一個StackOverflowErrornumber == Integer.MIN_VALUE,因爲-Integer.MIN_VALUE == Integer.MIN_VALUE。你可以解決這個問題如下:

if (number < 0) { 
    System.out.print("-"); 
    if (number == Integer.MIN_VALUE) { 
    System.out.print(-(number % 10)); 
    number /= 10; 
    } 
    reverse(-number); 
} else if ... 
+0

這是完美的!謝謝一堆。我正在考慮打印出「 - 」,但我不知道如何從那裏繼續。 –

+0

Super-nit:對於'number == Integer.MIN_VALUE'無法正常工作。 –

+0

@AndyTurner啊,因爲'Integer.MIN_VALUE * -1> Integer.MAX_VALUE'? – smarx

0

我希望這種方法將幫助您

public static void reverse(int number) { 
if (number < 10 && number > 0) { 
    System.out.println(number); 
    return; 
} else if (number > 0) { 
    System.out.print(number % 10); 
    reverse(number/10); 
} else { 
    System.out.print(number % 10); 
    reverse((number/10) * -1); 
} 
} 

在這裏,我們要打印的最後一個元素作爲一個消極因素,在這之後我們與乘以-1如此其餘元素將是積極的,積極的循環將在第二次進行。