Java 输入一个数字,然后将其反转

Java 输入一个数字,然后将其反转,java,string,numbers,reverse,Java,String,Numbers,Reverse,好的,所以我写了一个程序,要求用户输入一个数字,然后将其反转。我在这方面取得了成功,但是该程序不会反转以0结尾的数字。例如,如果我输入1234,它将打印出4321,但是如果我输入1200,它将只输出21。我尝试将要输出的数字转换为字符串。请帮助我理解我哪里做错了。请记住我是这方面的初学者:)。下面是我的代码 import java.util.*; public class ReverseNumber { public static void main (String [] args)

好的,所以我写了一个程序,要求用户输入一个数字,然后将其反转。我在这方面取得了成功,但是该程序不会反转以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);
    }
}

您将反向数字存储为整数。1200的反向是0021,但这只是21作为整数。您可以通过将每个数字分别转换为字符串来解决此问题。

问题是,您将反向值作为数字计算,当涉及数字时,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);
后一种方法是这样的:

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
而不是字符串串联,您可以获得更多信息。

去掉两个零的原因是将temp和reverse变量声明为整数

如果您将一个值赋给一个左侧为零的整数,例如000001或002,它将被去掉,并将成为我的示例中的1或2


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

我发现这种方法非常有趣,因为我通常不会这样反转它。我只是想用另一种方式,你可以反转它,或者在这个例子中,反转任何字符串

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)


}

噢,哇,谢谢你,雅各布,我终于明白我做错了什么。非常感谢您的帮助。请不要只发布代码而不告诉我们我们正在查看的内容。