我对粗体中的这一点感到困惑,究竟是什么意思,以及如何在没有看到解决方案的情况下解决这个问题?代码确实有效,但我不明白粗体:
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();
}
我不能将所选位置为粗体,但它是 * 中涵盖的代码的一部分,以及如何更好地处理这些古老代码的任何提示?
答案 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 /= 10
将n
的值替换为其原始值与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),你可以简单地添加它们。
这对我解释它的方式有意义吗?