微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决这是我的问题,更改后仍然没有解决方案

我已经上传了此代码,但是出现了一些问题,现在我更新了我的代码,当我输入123时,该程序无法为我提供确切的反向编号,但返回321,但是如果我输入001或100,则仅会返回我两种情况都可以帮助我解决此问题

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的字符串数字,将其取反并作为字符串返回:

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

第一点:在数字前加0时要小心。如果数字是整数文字,那么前导0实际上将导致整数解释为octal。在这种情况下,实际上八进制的001八进制也确实等于十进制的1,但这仅仅是由于运气好。如果您选择了另一个数字,它不会给您期望的结果。例如,以下代码实际打印63(不是 77):

public class HelloWorld{

     public static void main(String []args){
         int x = 0077;
        System.out.println(x);
     }
}

另一方面,如果您要从字符串中解析整数或使用扫描仪,则前导0会被简单地剥离掉。例如,以下打印77:

System.out.println(Integer.parseInt("0077"));

不幸的是,在任何情况下都不会得到0077,因此当您进行反向操作时,前0不会有任何区别。

另外,考虑一下100会发生什么:

reverse = reverse * 10 + remander;

以(和0 * 10 == 0)和100 % 10 == 0开头的反向为0,因为100可以被10整除。换句话说,该语句等于:

reverse = 0 * 10 + 0;

显然等于0。

,

您无法使用Scanner.nextInt()进行此操作,因为一旦转换为int,就无法判断是否包含前导零。与八进制情况无关,因为Scanner不会以这种方式处理整数。因此,您可以使用全字符串解决方案并验证字符是否为数字,或者同时使用数学和字符串方法。我做了后者。以下:

  • 读取String
  • 转换为int
  • 使用
    log10计算前导零的数量 int和输入的字符串的长度。
  • 分配一个StringBuilder来保存结果。
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));

用于输入00001000
打印00010000

请注意,Integer.MAX_VALUE仍然限制您的输入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。