【问题标题】:The loop has no output?循环没有输出?
【发布时间】:2022-02-03 03:46:21
【问题描述】:

下面的代码在我运行时没有输出,我认为它不知何故是无限循环?如何解决?

编写一个名为 getEvenDigitSum 的方法,其中一个 int 类型的参数称为 number。

该方法应返回数字中偶数位的总和。

如果数字为负数,该方法应返回 -1 以指示无效值。

输入/输出示例:

  • getEvenDigitSum(123456789); → 应该返回 20,因为 2 + 4 + 6 + 8 = 20

  • getEvenDigitSum(252); → 应该返回 4,因为 2 + 2 = 4

  • getEvenDigitSum(-22); → 应该返回 -1,因为数字是负数

public class getEvenDigitSum {
    public static int getEvenDigitSum(int number) {

        int sum = 0;
        int lastDigit=0;
        if (number < 0) {
            return -1;
        }
            while (number >0) {
                lastDigit = number % 10;
                if (number % 2 == 0)
                {
                    sum += lastDigit;
                    number = number / 10;

                }
                
            }
    return sum;
    }
}

【问题讨论】:

  • 你有什么问题?
  • return String.valueOf(number).chars().map(c -&gt; c - '0').filter(n -&gt; n % 2 == 0).sum();
  • 使用调试器逐步检查您的代码,您很快就会发现问题所在。

标签: java


【解决方案1】:
while (number >0) {
        lastDigit = number % 10;
        if (number % 2 == 0)
        {
            sum += lastDigit;
            number = number / 10;

        }

}

好的,如果数字不是偶数会发生什么?您没有在之后发表 else/else if 语句;如果你的数字是奇数,它保持不变,循环是无限的,因此你的代码什么都不做。

【讨论】:

    【解决方案2】:

    你的条件只处理偶数,但想想当你得到一个包含奇数的数字时会发生什么,例如 1221。

    尝试添加缺少的 else 语句:

    while (number >0) {
        lastDigit = number % 10;
            if (number % 2 == 0)
            {
                sum += lastDigit;
                number = number / 10;
            }
            else {
              // Deal with odd digit, leaving for you to implement 
            {
    }
    

    一般提示:在代码中查找错误的最佳方法是编写测试和调试代码。

    这是每个开发人员都应该经常练习和练习的两项技能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2013-07-22
      相关资源
      最近更新 更多