Java 求整数的和';s位使用此代码:
我对粗体字感到困惑,它到底意味着什么,如果没有看到解决方案,人们会如何理解这一点?代码确实有效,但我不理解粗体部分:Java 求整数的和';s位使用此代码:,java,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; //?????????????????
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();
}
我不能用粗体显示所选的位,但它是*中所述代码的一部分,以及如何更好地使用这些古老代码的任何提示?当输入一个数字时,它将被视为整数值,而不是一次一个数字。因此,您突出显示的代码基本上一次只取一个数字,方法是将其模化10,然后除以10 例如,如果我输入321,我将计算321%10=1,并将321除以10,即32。然后,32%10=2,32除以10等于3。因此,modding by 10得到最后一个数字的值,然后除以10就可以去掉这个数字 一旦您拥有了所有数字(在本例中为1、2和3),您就可以简单地将它们相加 我这样解释有意义吗
while (n > 0)
***{
sum += n % 10; //???????????????????????????????????????xplo
n /= 10;
}***
这里发生的是,和是n除以10后余数的当前累积和(运算符是模,是2个整数除以后的余数)
如果有整数123:
在n的第一次迭代之后:
总和的值是3(因为123/10的余数是3)。
n变为12,因为123除以10,int值被加载回n,用于下一次迭代
在n的第二次迭代之后:
总和的值是2+3(因为12/10的余数是2)。
n变为1,因为12除以10,并且int值被加载回n中用于下一次迭代
在n的第三次迭代之后:
总和的值是1+2+3(因为1/10的余数是1)。
n变为0,因为1除以10,并且在下一次迭代中加载回n的int值基本上测试指定数字除以10时的余数,这是从数字中获取最后一位数字的一种方法
n/=10
将n
的值替换为其原始值与10之间的整数除法结果。整数除法表示数字被除,但小数部分被删除,例如,128/10
为12。在这种情况下,它用于修剪整数的最后一位。这非常直观。要添加数字,您需要一次隔离一个数字。有什么方法比模量更好?然后除以移动到下一个数字。是的,在2秒钟内就可以识别出模式。(你也可以将二进制数转换成十进制。)