2015-11-07 104 views
-3

我不明白while循环是如何解析信息的。有人可以解释它是如何工作的吗?有人能解释一下这个while循环是如何工作的吗?

private static int sumDigits(int number) { 
    int sum = 0;    //Initialize sum 
    int rem;     //Initialize remainder 

    while (number > 0) {   //If number is greater than 0 true 
     rem = number % 10;   //<-- ?? 
     sum += rem;     //<-- ?? 
     number = number/10;   //<-- ?? 
    } 
    return sum; 
} 
+1

你知道'%','+ ='和'/'做什么吗?如果你知道每个操作都做了什么,你可以在纸上找出一个例子并解释清楚。 – lurker

+1

“我创建了一种方法”,但你不明白它说什么。你确定*它是*你*谁写的?尝试一个小程序并打印结果以查看它的实际运行情况。通过示例学习。 – ray

+1

我不明白你是如何创建一个方法,但不明白它的作用。如果这是作业和(我没有指责)你从别的地方得到了代码,请注意,教授检查软件抄袭,所以要小心:) – sam

回答

1

关键,理解这个代码是使用两个运营商 - 其余的运营商%和整数除法运算符/

  • %运算符产生的余数除以它的右边。在% 10的情况下,这意味着“得到数字的最后十进制数字”
  • /除法运算符丢弃余数,产生整数结果。用零除整数会丢弃最后一位数字。

例如,如果你开始n = 1234

int d = n % 10; 
int r = n/10; 

然后d4r123

在这一点上,应该清楚循环是如何进行终止的,以及它如何在迭代过程中累积数字的总和。

+0

因此,据我的理解,如果我们从n = 1234,d = 4,r = 123开始。循环会重复,d将= 3,r则会= 12并继续?如果是这样的信息存储在哪里,并将它们加在一起.. –

+0

@OhDavid想想一个'number'为'1234'的例子。在第一次迭代之后,'number'将会是'123'。在第二次迭代之后,它将是'12'。在第三次迭代之后,它将是'1'。在第四次迭代之后,它将为零,此时循环将终止。 – dasblinkenlight

+0

谢谢你澄清。你能解释一下数字是如何被存储的,如果变量被新的整数取代?还有什么增加了数字? –

0

在评论中填充,你注意到你有麻烦

private static int sumDigits(int number) { 
    int sum = 0;    //Initialize sum 
    int rem;     //Initialize remainder 



while (number > 0) {   //If number is greater than 0 true 
    rem = number % 10;   //rem now contains the remainder of the number/10 
    //Keep in mind, number % 10 will give you the rightmost digit in your number 
    sum += rem;     //add the remainder to your running total 
    number = number/10;   //divide your number by 10 so you can find 
    //the next right most digit in your number 
} 
return sum; 
0

这个例子试图总结的数量%所有的数字被用来获取每个while循环的最后一个数字,除以10完成为减少所有数字的数量和总和,请参阅我的内嵌评论

private static int sumDigits(int number){ int sum = 0; //初始化总和 int rem; //初始化其余部分

while (number > 0) {   //If number is greater than 0 true 
     rem = number % 10; //remainder after division by 10 e.g 12%10=2 
     sum += rem; //sum=sum+rem    //<-- ?? 
     number = number/10;//reduce one number by dividing to 10   //<-- ?? 
    } 
    return sum; 
} 
0

让我们来看一个例子。我们打电话sumDigits(1234)

第一次通过while环,number等于1234 rem = 1234 % 10,其评估对rem = 4作为剩余部分从除以1234通过图10是4(这是最右边的数字在number)。 sum += rem的计算结果为sum += 4,因此sum的值为4.由于numberint,存储其自身的值除以10导致123存储在number中。

通过while循环的第二次,number等于123 rem = 123 % 10,其评估对rem = 3作为剩余部分从除以123通过图10是3(这是最右边的数字在number)。 sum += rem评估为sum += 3,因此sum的值为7,因为sum在最后一次循环迭代结束时等于4。由于numberint,存储其自身的值除以10导致12存储在number中。

重复这两次,最后number等于零(因为int(1/10) = 0),因此,您将退出循环,并且sum将包含数字的总和。

+0

完美。非常感谢你,这是最清晰的解释,没有超过我的头。我现在完全理解它。 –

+0

我发现,通过函数/算法来处理示例数据是了解发生了什么的最好方法。当你学习更复杂的数据类型时,它会变得更复杂一些,但正如他们所说的,最好的学习方法就是 - 学习代码做什么来做代码的最好方法!祝你学习好运, –

相关问题