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

5 回答 5

5

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

于 2012-07-11T01:29:28.960 回答
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如果您研究何时更好地使用而不是字符串连接,您可以获得更多信息。

于 2012-07-11T01:33:40.383 回答
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);

于 2012-07-11T04:16:33.843 回答
0

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

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

因此,在您的示例中,1200 变成了类似 0021 的东西,但是由于您声明的变量是整数,所以它只变成了 21。

于 2012-07-11T01:37:45.617 回答
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();
}

}

于 2014-04-24T17:38:17.097 回答