Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 求整数的和';s位使用此代码:_Java - Fatal编程技术网

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秒钟内就可以识别出模式。(你也可以将二进制数转换成十进制。)