2

我对粗体字感到困惑,这到底是什么意思,如果没有看到解决方案,怎么会有人弄清楚这一点?代码确实有效,但我不明白粗体字:

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();
}

我不能将选定的位加粗,但它是*中涵盖的代码的一部分,以及有关如何更好地处理这些过时代码的任何提示?

4

3 回答 3

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 以进行下一次迭代

于 2013-03-13T01:47:40.340 回答
1

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

于 2013-03-13T01:47:46.097 回答
0

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

例如,如果我输入 321,我会计算 321 % 10 = 1,然后将 321 除以 10,即 32。然后,32 % 10 = 2,并且 32 除以 10 是 3。所以除以 10 得到最后一位数字的值,然后除以 10 去掉该数字。

获得所有数字(在本例中为 1、2 和 3)后,您可以简单地将它们相加。

我解释的方式有什么意义吗?

于 2013-03-13T01:47:19.357 回答