我对此循环的理解是否正确?

时间:2012-10-19 13:28:26

标签: java

书中的示例要求用户输入任何正数。然后程序将分别添加各个数字并打印总数。例如,如果用户输入数字7512,则程序设计为添加7 + 5 + 1 + 2,然后打印总数。

我已经写出了我理解代码如何工作的方式。它是否正确?我对每个步骤的循环是否正确,或者我是否缺少任何计算?在7%10中没有剩余时,第4次循环会发生什么?

1st  run of loop ... sum = sum + 7512 % 10 which is equal to 2 
                        n = 7512 / 10 which which equals to 751 

2nd run of loop ... sum = 2 + 751 % 10 which is equal to 1 
                         n = 751 / 10  which is equal to 75 

3rd run of loop ...  sum = 3 + 75 % 10 which is equal to 5 
                          n  = 75 / 10 which is equal to 7

4th run of loop ...  sum = 8 + 7 % 10   <------? 

import acm.program.*; 

   public class DigitSum extends ConsoleProgram{

   public void run() {
   println("This program will add the integers in the number you enter.");
   int n = readInt("Enter a positive integer: ");
   int sum = 0;
   while (n > 0) {
        sum += n % 10;
        n /= 10; 
    }
    println("The sum of the digits is" + sum + ".");    
  }
}

4 个答案:

答案 0 :(得分:6)

操作7 % 10的结果是7,将7除以10时的余数。循环的最后一次迭代是将7添加到先前值。循环中的下一个除法步骤(n /= 10;)将n取为0,这就是循环的结束。

答案 1 :(得分:1)

%/

不同

%运算符用于模数,而不是除法...这意味着运算的结果不是除法,而是获得除法的其余部分,如:

7512 % 10 => 2  
751 % 10 => 1  
75 % 10 => 5  
7 % 10 => 7  

在处理数字操作时,这种逻辑经常被使用。

答案 2 :(得分:0)

    运行前
  • ,sum = 0,n = 7512
  • 第一轮循环... sum = 0 + 2 =&gt; sum = 2,n = 751
  • 第二轮循环... sum = 2 + 1 =&gt; sum = 3,n = 75
  • 第3轮循环... sum = 3 + 5 =&gt; sum = 8,n = 7
  • 第4轮循环... sum = 8 + 7 =&gt; sum = 15,n = 0

答案 3 :(得分:0)

7%10之后,您获得7,并将其添加到您的结果中。 7/10将导致0,因此您的循环结束,您的总和现在已添加了您想要的内容。