Java 反整数

Java 反整数,java,reverse,Java,Reverse,整数的倒数 示例1:x=123,返回321 示例2:x=-123,返回-321 我试图使用下面的代码来解决整数反转问题。但是,当我将int转换为字符串,然后将字符串转换回int时,出现了一个错误。我想知道内存分配是否限制了这种方法 错误是第4行:错误:不兼容的类型:从long到int的可能有损转换 public class Solution { public long reverse(int x) { String input = String.valueOf(x);

整数的倒数

示例1:x=123,返回321 示例2:x=-123,返回-321

我试图使用下面的代码来解决整数反转问题。但是,当我将int转换为字符串,然后将字符串转换回int时,出现了一个错误。我想知道内存分配是否限制了这种方法

错误是第4行:错误:不兼容的类型:从long到int的可能有损转换

public class Solution {
    public long reverse(int x) {
        String input = String.valueOf(x);
        char[] num = input.toCharArray();
        StringBuffer reverse = new StringBuffer();
        if(x<0){
            reverse.append("-");
            for(int i=num.length-1;i>0;i--){
                reverse.append(num[i]);
            }
        }else{
            for(int i=num.length-1;i>=0;i--){
                reverse.append(num[i]);
            }
        }
        return Long.parseLong(reverse.toString());
    }
}
公共类解决方案{
公共长反转(int x){
字符串输入=String.valueOf(x);
char[]num=input.toCharArray();
StringBuffer reverse=新的StringBuffer();
如果(x0;i--){
反向追加(num[i]);
}
}否则{
对于(int i=num.length-1;i>=0;i--){
反向追加(num[i]);
}
}
返回Long.parseLong(reverse.toString());
}
}

类似于此的功能:

public long reverse(int x) {
    String input = String.valueOf(x); //123
    long result = Long.parseLong(new StringBuilder(input).reverse().toString());
    return result; //321
}

它符合你的要求

public static long reverseInteger(int n){
    String answer = "";
    if (n == Integer.MIN_VALUE)
        return -8463847412L;
    boolean negative = false;
    if (n < 0) {
        negative = true;
        n = -n;
    }
    while (n > 0) {
        answer += (n % 10);
        n = n/10;
    }
    long toReturn = Long.parseLong(answer);
    return (negative) ? -toReturn : toReturn;
}
公共静态长反转整数(int n){
字符串答案=”;
if(n==Integer.MIN_值)
返回-8463847412L;
布尔负=假;
if(n<0){
负=真;
n=-n;
}
而(n>0){
回答+=(n%10);
n=n/10;
}
long toReturn=long.parseLong(答案);
返回(负)-返回:返回;
}
当然,
static
关键字是可选的。
这取决于您如何使用它。

您收到的错误消息可能是由于代码中的其他地方造成的;可能是将
reverse()
(长)返回的值赋给
int
变量

但是,代码中存在不必要的低效。您正在创建一个
字符串
,只是为了将其重新解析回一个数字。以下代码返回一个完全不使用任何字符串的反向数字:

public static long reverse(int n){
    long r = 0;
    while (n != 0) {
        r *= 10;
        r += (n % 10);
        n /= 10;
    }

    return r;
}
请注意,此方法也适用于负数,无需专门检查负数


此方法适用于所有可能的
int
值。

错误是什么?请将这些信息与您的问题一起发布。这将有助于了解存在何种错误…;-)你好你能告诉我们你得到了什么错误吗?“错误是第4行:错误:不兼容类型:可能从long到int的有损转换”问题中的代码不会产生该错误。请给出错误发生的具体示例。它必须返回long,因为int在反转时,可能是一个大于整数的数字。现在这可能是它应该做的,但我怀疑这可能被认为是“作弊”,因为您只是在调用
reverse()这个问题可能是为了看候选人如何做倒车。这似乎是我想要的,但我没有想到320的情况。我不能把它换成023,但换成23。因此,通过将数字转换为字符串来反转数字可能不是一个好主意。我认为不可能在long或int等基本类型中保留前导零。不过,如果我错了,有更多知识的人可以纠正我。我很好奇myself@KyleChen您希望反转(320)返回什么?如果您想要“023”,那么它需要返回一个字符串,而不是一个长字符串。如果你想让它返回“23”,那么这些答案(包括我的答案)就是这样做的。为什么你要使用装箱类型
Integer
Long
,而不是
int
Long
?因为我需要它一次,但没有编辑它。等待20秒;)尝试调用reverseInteger(Integer.MIN_VALUE);-)谢谢你,克里托斯。一开始我没有意识到溢出。。。没有对称性。不,都是MIN。你自己试试吧<代码>System.out.println(-(Integer.MIN_值)=Integer.MIN_值)==>打印“真”硬编码案例,如
Integer。最小值
不是一种错误的方法,因为思考需要花费;)实际上,我的第一个版本需要专门处理Integer.MIN_值,但我的最新编辑适用于所有可能的int值,包括Integer.MIN_值@GrzegorzGórkiewicz学校式的解决方案(不错)。另一个选项是玩字符串。将为
Integer.MIN\u值提供向上投票权(大小写;)