Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反转整数而不丢失0';输入中的s_Java_Int_Reverse - Fatal编程技术网

Java 反转整数而不丢失0';输入中的s

Java 反转整数而不丢失0';输入中的s,java,int,reverse,Java,Int,Reverse,我有以下代码可以反转整数输入。但是,如果我在输入开始处输入零,例如01234,它将返回整数4321而不是43210。我看过其他解决方案,但它们都是通过将输入作为字符串,然后反转字符串来解决问题的。但是,我需要输入int类型 有人知道我如何解决这个问题吗 public static int reverseInputNumber(int num){ int reverse = 0; while(num!=0) { reverse = (reverse*10)+num%

我有以下代码可以反转整数输入。但是,如果我在输入开始处输入零,例如01234,它将返回整数4321而不是43210。我看过其他解决方案,但它们都是通过将输入作为字符串,然后反转字符串来解决问题的。但是,我需要输入int类型

有人知道我如何解决这个问题吗

public static int reverseInputNumber(int num){
    int reverse = 0;
    while(num!=0) {
        reverse = (reverse*10)+num%10;
        num /= 10;
    }
    return reverse;
}

整数存储整数值,而不是整数值的特定表示形式的编码。所以为了得到你想要的,你要说的是反转整数的表示

编辑:我想我应该添加一些代码来使用字符串解决这个问题

public static int reverseInputNumber(int num)
{
    String reverse = StringBuilder(num + "").reverse().toString();
    return reverse;
}

第二次编辑:实际上,即使是这段代码也不会做您希望它做的事情。通过将int作为参数,您已经失去了整数的原始表示形式。准确地说,没有函数可以只接受一个整数参数并返回与原始表示相反的内容。您需要单独处理字符串或其他更合适的数据结构。

如果要求您的输入为
int
,则将其转换为
String
,并将其反转

String reverseInt(int in){
    String a = Integer.toString(in);
    return new StringBuilder(a).reverse().toString();
}

如果您的输出要求为
int
,那么在java中无法使用前导的
0
,使用零作为最高有效位,它会将数字解释为八进制数。因此
01234
转换为:

4 + 3 x 8 + 2 x 8^(2) + 1 x 8^(3) = 668
因此,您最好像在其他答案中一样使用convert-to-string方法之一

编辑:这是一个没有StringBuffer等的版本:

public String getReversed(int number) {
    char[] digitArray = String.valueOf(number).toCharArray();
    String strNum = "";

    for (int i = digitArray.length - 1; i >= 0; i--) {
        strNum += digitArray[i];
    }
    return strNum;
}
第二次编辑:反转
char
数组,然后在完成反转后创建
字符串
,因为可能会创建大量的
O(n^2)
操作,这可能是垃圾收集器的问题

public String getReversed(int number) {
    char[] digitArray = String.valueOf(number).toCharArray();
    char[] reversedDigitArray = new char[digitArray.length];

    for (int i = 0; i < digitArray.length; i++) {
        reversedDigitArray[i] = digitArray[digitArray.length - i - 1];
    }
    return new String(reversedDigitArray);
}

把它设为int,然后把它转换成String,然后把它颠倒过来,再把它设为int,怎么样int@arynaq这是他已经在做的事情,但也不能解决前面的0问题。最好是将char[]倒过来,然后使用String(char[])构造函数,由于目前存在创建大量垃圾收集的O(N^2)操作的可能性。@varunmediath这样更好吗?我想说是的,进一步的改进是对其进行适当排序,但是int的最大值中的位数使得这里的惩罚太小而不必担心。这不是问题,我刚刚更新了我的答案来描述为什么我们的两种方法都不起作用。我正在浏览你的第三次编辑,我想知道你为什么使用正确的转换?我似乎看不出原因,想解释一下吗?
public static String getReversed(int number) {
    char[] digitArray = String.valueOf(number).toCharArray();
    int count = digitArray.length - 1;
    char tmp;

    for (int i = (count-1) >> 1; i >= 0; --i) {
        tmp = digitArray[i];
        digitArray[i] = digitArray[count - i];
        digitArray[count - i] = tmp;
    }
    return new String(digitArray);
}