2012-07-11 22 views
2

好吧,我寫了一個程序,要求用戶輸入一個數字,然後將其逆轉。我成功了,但是該程序不會反轉以0結尾的數字,例如,如果我輸入1234,它會打印出4321,但是如果我輸入1200,它將只輸出21.我嘗試轉換成爲輸出的數字成串。請幫我理解我做錯了什麼。只記得我是這個:)的初學者。以下是我的代碼。輸入一個數字然後倒轉它

import java.util.*; 
public class ReverseNumber 
{ 
    public static void main (String [] args) 
    { 
     Scanner n = new Scanner(System.in); 
     int num; 
     System.out.println("Please enter the number"); 
     num = n.nextInt(); 
     int temp = 0; 
     int reverse = 0; 
     String str = ""; 
     System.out.println("The number before getting reversed " + num); 
     while (num != 0) 
     { 
      temp = num % 10; 
      reverse = reverse*10 + temp; 
      num = num/10; 
      str = Integer.toString(reverse); 
     } 
     //String str = Integer.toString(reverse); 
     System.out.println("The reversed number is " + str); 
    } 
} 
+0

哇哦謝謝雅科我終於明白我在那裏做錯了什麼。非常感謝你的幫助。 – croxfade 2012-07-11 02:18:50

回答

5

您正在將反轉的數字存儲爲int。 1200的倒數是0021,但這只是21的整數。您可以通過將每個數字分別轉換爲字符串來修復它。

3

問題是,你正在計算反轉值作爲數字,而就數字而言,0021和21之間沒有區別。你想要的是直接打印出反轉值,重新翻轉它或將它構建爲一個字符串,然後將其打印出來。

前一種方法會是這樣的:

System.out.print("The reversed number is "); 
while (num != 0) 
{ 
    System.out.print(num % 10); 
    num = num/10; 
} 
System.out.println(); 

後一種方法會是這樣的:

String reverse = ""; 
while (num != 0) 
{ 
    reverse = reverse + Integer.toString(reverse); 
    num = num/10; 
} 
System.out.println("The reversed number is " + reverse); 

,如果你需要做進一步的工作在顛倒值後一種方法是非常有用的。然而,由於超出此問題範圍的原因,這並不理想。如果您研究何時使用StringBuilder而不是字符串連接更好,您可以獲得更多信息。

0

兩個零被剝離的原因是因爲將temp和reverse變量聲明爲整數。

如果你在左邊,例如,000001或002賦值給一個整數零,這將被剝離出來,成爲意志在我的例子爲1或2

所以,在你的榜樣1200成爲像這樣的0021,但由於你聲明的整數變量,它只成爲21.

1

我其實發現這種方式真的很有趣,因爲這不是我通常會扭轉它。只是想過貢獻另一種方式,你可以扭轉它,或在這種情況下,扭轉任何字符串。

public static void main() 
{ 
    Scanner n = new Scanner(System.in); 
    System.out.print("Please enter the number:"); 
    int num = n.nextInt(); 
    System.out.println("The number before getting reversed is " + num); 

    String sNum = Integer.toString(num); 
    String sNumFinal = ""; 
    for(int i = sNum.length()-1; i >= 0; i--) 
    { 
     sNumFinal += sNum.charAt(i); 
    } 
    System.out.print("The reversed number is " + sNumFinal); 
} 

如果您想進一步藉此,讓你可以輸入「00234」,並把它輸出「43200」(否則它會起飛的前導零),你可以這樣做:

public static void main() 
    { 
     Scanner n = new Scanner(System.in); 
     System.out.print("Please enter the number:"); 
     String num = n.next(); // Make it recieve a String instead of int--the only problem being that the user can enter characters and it will accept them. 
     System.out.println("The number before getting reversed is " + num); 

     //String sNum = Integer.toString(num); 
     String sNumFinal = ""; 
     for(int i = num.length()-1; i >= 0; i--) 
     { 
      sNumFinal += num.charAt(i); 
     } 
     System.out.print("The reversed number is " + sNumFinal); 
    } 

當然,如果你想把它當作一個int,只是做Integer.parseInt(sNumFinal);

0
import java.util.Scanner; 


public class Reverse { 
    public static void main(String args[]){ 

    int input,output=0; 
    Scanner in=new Scanner(System.in); 
    System.out.println("Enter a number for check."); 
    input=in.nextInt(); 

    while (input!=0) 
    { 
    output=output*10; 
    output=output+input%10; 
    input=input/10; 
    } 
    System.out.println(output); 
    in.close(); 
} 

}

+0

請不要在沒有告訴我們我們在看什麼的情況下發布代碼。 – Andrew 2014-04-24 18:00:26

相關問題