【问题标题】:reversing a number using do-while使用 do-while 反转数字
【发布时间】:2020-05-05 02:19:21
【问题描述】:

创建一个读取整数 (NUM) 的 Java 程序,并使用除法和余数/模运算符确定其反转。如果最后一位数字为零,则在反转数字之前将其替换为一 (1)。还输出所有数字的总和。

import java.util.*;

public class Main {
    static int replace(int number){
        if (number == 0)
            return 0;
        int digit = number % 10;

        if (digit == 0)
            digit = 1;

        return (number/10) * 10 + digit;
    }

    static int Convert(int number){
        if (number == 0)
            return 0;
        else
        return replace(number);
    }

    public static void main(String[] args) {
        int number;
        Scanner kb = new Scanner(System.in);

        System.out.print("Enter the number : ");
        number = kb.nextInt();
        System.out.println("replace:"+replace(number));
        int a, m = 0, sum = 0;

        do{
            a = replace(number) % 10;
            m = m * 10 + a;
            sum = sum + a;
            number = replace(number) / 10;
        }
        while( replace(number) > 0);

        System.out.println("Reverse:"+m);
        System.out.println("Sum of digits:"+sum);
    }
}

目前在反转号码时出现问题,因为它也替换了号码的最后一位,这不应该发生。

当前程序的输入/输出

输入号码:2300

替换:2301

反向:1132

数字总和:7

【问题讨论】:

  • 仅供参考:您应该考虑开始使用空格 (4) 或制表符来格式化您的代码。这将提高代码的可读性和可维护性。
  • 另一条评论:你应该开始避免每次都给你的类命名 Main,给它一个有意义的名字来说明程序正在做什么:NumberUtility、NumberFlipper 等等。此外,请尝试停止将所有方法创建为静态方法。相反,在您的主方法中创建类的新实例并调用非静态方法:new NumberUtility().replace()。最后,方法不应该以大写开头——它们应该是驼峰式。
  • 在您的问题陈述中,您说:“如果最后一位数字为零,请在反转数字之前将其替换为一 (1)。 ' 在调用 reverse() 之前,您没有执行此检查/更新的代码
  • 您对问题的最后一次编辑删除了对您尝试做什么的解释。请把它带回来,让发现这个问题的人更容易理解这个问题。

标签: java


【解决方案1】:

改为这样做

import java.util.*;

public class Main {
    static int replace(int number){
        if (number %10 == 0)
            return number += 1;
        return number;
    }

    static int Convert(int number){
        if (number == 0)
            return 0;
        else
            return replace(number);
    }

    public static void main(String[] args) {
        int number;
        Scanner kb = new Scanner(System.in);

        System.out.print("Enter the number : ");
        number = kb.nextInt();
        int a = 0, m = 0, sum = 0;

        number = replace(number);
        System.out.println("replace:" + number);

        do{
            a = number %  10;
            m = m * 10 + a;
            sum = sum + a;
            number /= 10;
        }
        while( number > 0);

        System.out.println("Reverse:"+m);
        System.out.println("Sum of digits:"+sum);
    }
}

由于您替换数字的方式,您的代码根本上是错误的。

所做的更改:

  1. 更改了替换算法(您不能将所有 0 值都更改为 1,这是错误的以及为什么您得到错误的值)
  2. 在进入循环之前替换数字。 (您不需要在 3 个不同的地方替换循环的每次迭代)

预期输出:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 2015-02-16
  • 1970-01-01
相关资源
最近更新 更多