Java 这是我的问题,修改后仍然没有解决方案

Java 这是我的问题,修改后仍然没有解决方案,java,reverse,desktop-application,Java,Reverse,Desktop Application,我已经上传了这个代码,但它有一些问题,现在我更新了我的代码。当我输入123时,这个程序没有提供准确的反向数字。它返回我321,但如果我输入001或100,它只返回我1。在这两种情况下,帮助我解决这个问题 public class Employee { void fun(int choice) { int number = choice; int remander = 0; int reverse = 0; while (nu

我已经上传了这个代码,但它有一些问题,现在我更新了我的代码。当我输入123时,这个程序没有提供准确的反向数字。它返回我321,但如果我输入001或100,它只返回我1。在这两种情况下,帮助我解决这个问题

public class Employee {
    void fun(int choice) {
        int number = choice;
        int remander = 0;
        int reverse = 0;
        while (number >= 1) {
            remander = number % 10;> taking remainder here

            reverse = reverse * 10 + remander;
            number = number / 10;
        }
        System.out.println(reverse);
    }

    public static void main(String args[]) {
    Employee ob=new Employee();
    int choice;
        System.out.println("Enter number you want to return");
        Scanner obj=new Scanner(System.in);
       choice= obj.nextInt();
    ob.fun(choice);
    }
}
`

下面是一个单行程序,可用于将int转换为字符串数字流,将其反转并作为字符串返回:

Stream.of(Integer.toString(choice).split("")).reduce((c1,c2)->c2+c1).get();

第一点:在数字中添加前导0时要小心。如果数字是整数文字,则前导0实际上会导致整数被解释为。在本例中,001八进制实际上也等于十进制中的1,但这只是因为运气。如果你选择了另一个数字,它不会给你你期望的结果;例如,以下代码实际上打印63而不是77:

另一方面,如果您正在解析字符串中的整数或使用扫描器,则前导0将被剥离。例如,以下打印77:

System.out.println(Integer.parseInt("0077"));
不幸的是,在这两种情况下都不会得到0077,因此在执行反向操作时,前导0不会产生任何影响

另外,想想100年后会发生什么:

reverse = reverse * 10 + remander;
相反,从0开始,0*10==0和100%10==0,因为100可以被10整除。换句话说,该语句等于:

reverse = 0 * 10 + 0;
这显然等于0。

您不能使用Scanner.nextInt执行此操作,因为在前导零转换为int后,无法判断前导零是否包含在内。并且,由于Scanner不以这种方式处理int,所以八进制情况不相关。因此,您可以使用全字符串解决方案并验证字符是否为数字,或者使用数学和字符串方法的混合。我做了后者。以下是:

以字符串形式读取 转换为整数 使用 int和输入字符串的长度。 分配StringBuilder以保存结果。 输入为000011000 打印00010000张


请注意,您仍然受Integer.MAX\u值的限制。

您可以使用字符串而不是intare u值来完成输入。确定吗?你试过了吗?是的,看到我的答案了吗?如果是Java代码中的文字,带前导零的数字只能解释为八进制。如果数字是用扫描器输入的,它只是一个带前导零的数字。你的意思是说我应该把输入作为字符串,这样这个问题就会解决,因为如果我取int,八进制的情况就会发生。这样一来,前导零就不意味着八进制。它还允许您计算前导零的数量。
reverse = 0 * 10 + 0;
Scanner input = new Scanner(System.in);

String val = input.nextLine();
int numb = Integer.valueOf(val);
int len = val.length();

// exponent of the entered number rounded up to the next int.
// This computes the number of digits in the actual int value.
int exp = (int) Math.log10(numb) + 1;

// now reverse the integer and store in the StringBuilder
StringBuilder sb = new StringBuilder();
while (numb > 0) {
    sb.append(numb % 10);
    numb /= 10;
}
// and append the leading zeros.
System.out.println(sb + "0".repeat(len - exp));