输入一个数字然后反转它

时间:2012-07-11 01:25:57

标签: java string numbers reverse

好的,所以我编写了一个程序,要求用户输入一个数字,然后将其反转。我成功了但是程序没有反转以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);
    }
}

5 个答案:

答案 0 :(得分:5)

您将反转的数字存储为int。 1200的反面是0021,但这只是21作为int。您可以通过单独将每个数字转换为字符串来修复它。

答案 1 :(得分: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而不是字符串连接,则可以获得更多信息。

答案 2 :(得分:1)

我实际上发现这种方式非常有趣,因为这并不是我通常会如何扭转它。只是想提供另一种方法来反转它,或者在这种情况下,反转任何String。

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

答案 3 :(得分:0)

两个零被剥离的原因是因为将temp和reverse变量声明为整数。

如果您为左侧为零的整数(例如000001或002)分配了一个值,它将被删除,并将在我的示例中变为1或2。

所以,在你的例子中,1200变成类似于0021的东西,但由于你声明变量是整数,它只变为21。

答案 4 :(得分: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();
}

}