2016-11-08 30 views
2
class Example { 
    public static void main(String args[]) { 
     double nums[] = {10.1, 11.2, 12.3, 13.4, 14.5}; 
     double result = 0; 
     int i; 

     for(i=0; i<5; i++) 
     result = result + nums[i]; 

     System.out.println("Average is " + result/5); 
    } 
    } 

对不起,如果这个问题太蠢,问,但我需要知道。为什么我们必须声明double result = 0? 以及为什么写结果=结果+ nums [i]?为什么我们不能写结果= nums [i]?结果=结果+ [i]?

+1

1.'result = 0' - 初始化结果,因为它是很好的编程习惯。 2.'result = result + nums [i]'继续添加以产生前一个赋值结果的值加数组中的当前值('nums [i]')。 – Laazo

+0

如果你在纸上添加了'nums',你会从零开始,然后为每个值删除旧的总数,添加新的'nums [i]',然后写下新值。这基本上是如何描绘你的问题的答案。 –

+0

其简单,我们存储到目前为止看到的所有元素的总和的结果。对于第一个元素,我们只看到一个元素,因此结果在开始时为0,我们添加了我们看到的任何数字,直到看到最后一个元素。 – Arthas

回答

2

为什么我们必须声明double result = 0?

这是因为你的结果变量是块变量,这意味着 你需要先初始化,然后才能使用它。

为什么写结果= result + nums [i]?为什么我们不能写结果= nums [i]?

result = nums [i]只分配变量中的值。
结果=结果+ nums [i]分配总和值结果nums [i]

您也可以使用它。

result += nums[i]; 

而不是这个。

result = result + nums[i]; 
1

写作result = nums [i]会的nums[i]值分配给result,一边写result = result + nums[i]会的resultnums[i]当前值赋给result

所以,每当你绕着你的循环,你的值nums[i]result,而不是取代它。

声明result = 0只是初始化result至0

+0

非常感谢! :)另一个问题,如果我不写双结果= 0呢? – Ladywithahat

+0

_result = 0_只是将_result_初始化为0的值。如果你不这样做,当你尝试向_nums [i] _添加_nums [i] _时,编译器会抱怨,因为它试图将_nums [i] _添加到未知值。看看[这里](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)(在“默认值”的图表下)以获取更多信息。 – Gulllie

0

好的价值!好的!好吧!,就在这里。一个简单的解释 -

假设您编写result = num [i]for循环内。

在for循环内部的迭代过程中,您正在编写的内容为System.out.println(“Average is”+ result/5);

的输出结果将是 -

For Iteration 1 - Average is 10.1/5 
For Iteration 2 - Average is 11.1/5 
For Iteration 3 - Average is 12.3/5 
and So on.. for next two iterations. 

正如你所看到的,他们没有加起来。它只是分割阵列的索引值并打印它。 所以,将你的数组的索引值,则需要结果=结果+ NUMS [I]

现在,这里是一个转折。因为,您正在编写result = result + nums [i],从而更新结果值。对于第一次迭代,不会有以前的结果值。 没有更新,因为以前的值不知道。因此,你得到了编译错误