【问题标题】:Here is my question with after changes but still no solution这是我在更改后的问题,但仍然没有解决方案
【发布时间】:2021-01-07 21:21:28
【问题描述】:

我已经上传了这段代码,但它有一些问题,现在我更新了我的代码,当我输入 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);
    }
}
`

【问题讨论】:

  • 你可以用 String 而不是 int 来做到这一点
  • 你确定吗?你试过了吗
  • 是的,请看下面我的回答

标签: java reverse desktop-application


【解决方案1】:

这是一个可用于将字符串数字的int 转换为Stream 的单行代码,将其反转并作为字符串返回:

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

【讨论】:

    【解决方案2】:

    第一点:注意在数字前添加 0。如果数字是整数文字,则前导 0 实际上会导致整数被解释为octal。在这种情况下,八进制的 001 实际上也等于十进制的 1,但这只是由于运气。如果你选择了另一个号码,它不会给你你期望的结果;例如,下面的代码实际上打印了 63 (not 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;
    

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

    reverse = 0 * 10 + 0;
    

    显然等于 0。

    【讨论】:

    • 带有前导零的数字只有在 Java 代码中是文字时才被解释为八进制。如果数字是用 Scanner 输入的,它只是一个前导零的数字。
    【解决方案3】:

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

    • 读入String
    • 转换为int
    • 使用
      intlog10 和输入字符串的长度来计算前导零的数量。
    • 分配一个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 的输入。

    【讨论】:

    • 你的意思是说我应该将输入作为字符串,所以这个问题将解决,因为如果我接受 int 那么八进制情况就会发生
    • 是的。这样,前导零就不会暗示八进制。它还允许您计算有多少前导零。
    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 2020-03-31
    • 2017-12-18
    • 2022-12-04
    • 2020-12-15
    相关资源
    最近更新 更多