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