【问题标题】:Finding value of 'i' in a for loop?在 for 循环中查找“i”的值?
【发布时间】:2015-10-05 05:12:18
【问题描述】:

我有这个问题:

下面的 for 循环后面的 i 是什么? 给定的代码是:

 int y= 0; 
for (int i= 0; i<10; ++i) 
{  
  y+= i; 
}

我说答案是 9,但根据评分员的说法这是不正确的。我什至打印了“i”,结果是 9。

【问题讨论】:

  • i 在 for 循环之后不存在,因为它超出了范围。
  • 你确定你不是指y的值吗?因为那肯定不会是 9...
  • i 在它不存在之前的最后一个值是 10。这是使循环中断的值。

标签: java for-loop pre-increment


【解决方案1】:

答案是循环后 i 未定义。不过,在最后一次迭代中是 9。

【讨论】:

  • i 在最后一次迭代中是 10,但其他一切都在。
  • 猜猜这取决于我们如何定义“最后一次迭代”。如果我们要在循环内打印i 的值,您会看到的最大值是 9,但在程序退出循环之前,i 被赋值为 10。我想。现在我得去试试了。
【解决方案2】:

i 的值将是 10。截至目前,如果您尝试在循环外打印 i 的值,i 是未定义的。

i 为9 时,您继续循环,下一次迭代i 变为10,条件失败并导致循环中断。所以i 的值是 10。请记住,stpe 声明为++ii++i 将参加的值没有什么不同。 step 语句总是在下一次迭代开始之前执行。

以下小的变化将帮助您证明输出。

 int i,y= 0; 
 for (i= 0; i<10; ++i) 
 {  
      y+= i; 
 }
 printf("%d\n",i);

也就是说,如果您在循环中打印i 的值,那么您将在输出中得到i 的最大值为9。可能这就是您将答案总结为 9 所做的事情。

 int y= 0; 
 for (int i= 0; i<10; ++i) 
 {  
     y+= i; 
     printf("%d\n",i);
 }

【讨论】:

  • 是的,谢谢你,这正是我所做的。我现在明白了。
【解决方案3】:

这样想。使用y+=i 是不断地将y 的当前值添加到i 的值。因此,反过来,您得到的不是i 的真实值,而是累积值。

这就是y+=i中实际发生的事情

1+2+3+4+5+6+7+8+9

另外,在循环之后打印出i 是无效的,因为在for 循环之外,i 不再存在。

你可以这样做:

int y=0;
for(int i = 0; i<10;i++)
  y=i;
System.out.println(y);

【讨论】:

  • y+=iy= y + i,不是吗?
  • 正确,y+=i 基本上是y 不断添加自己到i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多