使用以下代码查找整数位的总和:

时间:2013-03-13 01:42:05

标签: java

我对粗体中的这一点感到困惑,究竟是什么意思,以及如何在没有看到解决方案的情况下解决这个问题?代码确实有效,但我不明白粗体:

public int sumOfDigits(int n)
{
    int sum = 0;
    n = Math.abs(n); //removes the minus sign from a negative integer
    while (n > 0)
    ***{
        sum += n % 10; //???????????????????????????????????????xplo
        n /= 10;
    }***
    return sum;
}

public void inputAndProcess()
{
    int n = 0;
    Input in = new Input();
    while (true) 
    { 
        System.out.print("Type an integer: ");
        if (in.hasNextInt()) 
        { 
            n = in.nextInt(); 
            break;
        }
        in.nextLine(); 
        System.out.println("You did not type an integer, try again."); 
    }
    System.out.print("The sum of the digits of " + n); 
    System.out.println(" is: " + sumOfDigits(n)); 
}   

public static void main(String[] args)
{
    new Example1_1().inputAndProcess();
}

我不能将所选位置为粗体,但它是 * 中涵盖的代码的一部分,以及如何更好地处理这些古老代码的任何提示?

3 个答案:

答案 0 :(得分:1)

while (n > 0)
    ***{
        sum += n % 10; //???????????????????????????????????????xplo
        n /= 10;
    }***

这里发生的是总和是n除以10后的余数的当前累积和(%运算符是模数,是2个整数除法后的余数)。

如果你有整数123:

在n的第一次迭代之后: sum的值为3(因为123/10的余数为3)。 n变为12因为123除以10,并且int值加载回n以进行下一次迭代

n次迭代后: sum的值是2 + 3(因为12/10的余数是2)。 n变为1,因为12除以10,并且int值加载回n以进行下一次迭代

在n的第三次迭代之后: sum的值是1 + 2 + 3(因为1/10的余数是1)。 n变为0,因为1除以10,并且int值加载回n进行下一次迭代

答案 1 :(得分:1)

% 10基本上测试当指定的数字除以10时剩余部分是什么,这是从数字中获取最后一个数字的方法。 n /= 10n的值替换为其原始值与10之间的整数除法的结果。整数除法表示该数字被分割,但小数部分被删除,例如, 128 / 10为12.在此上下文中用于修剪整数的最后一位。

答案 2 :(得分:0)

输入数字时,它被视为整数值,而不是一次一个数字。因此,您突出显示的代码基本上通过修改10然后除以10来一次取一个数字。

例如,如果我输入321,我将计算321%10 = 1,并将321除以10,即32.然后,32%10 = 2,32除以10是3.所以通过10获取最后一位数的值,然后除以10将数字关闭。

一旦你拥有了所有的数字(在这种情况下,1,2和3),你可以简单地添加它们。

这对我解释它的方式有意义吗?