java - 以下循环迭代多少次?
问题描述
] 1
我的同学认为是 10 我知道是 11。我无法正确解释,所以有人想试一试吗?
变量从 10 开始。每次通过时,它减 1,当 x 不大于 0 时循环退出。所以当 x 变为 0 时,循环退出。所以它从 10 到 0 发生。那是 11 次。
解决方案
这可能比你想知道的要多,但你去吧。
您的示例与for (x = 10; x < 0; x--);
大多数循环都有开始、结束和增量。(我不会说all loops
,因为有人会想出一个不起眼的例子来证明我错了)。
对于 for 循环,有两种情况需要考虑。
对于(x = 开始;x <= 结束;x+=inc);// 我称之为关闭
对于(x = 开始;x < 结束;x+inc);// 我称之为开放
对于闭环,次数计算为:
(end-start)/inc + 1
开环更复杂,因为必须减去 1 才能
end
强制它成为一个closed
循环。可以计算为
(end-1-start)/inc + 1
如果您更改 and 的位置并执行增量,这start
也end
有效decrement
。
在您的情况下,它将是 (10 - 1 - 0)/1 + 1 = 10。
这里有一些测试代码可以用来检查每个循环类型。
public static void main(String[] args) {
Random r = new Random();
for (int t = 0; t < 10_000; t++) {
int realCountClosed = 0;
int realCountOpen = 0;
int start = r.nextInt(10);
int end = r.nextInt(30) + 11;
int inc = r.nextInt(4) + 1;
for (int i = start; i <= end; i += inc) {
realCountClosed++;
}
for (int i = start; i < end; i += inc) {
realCountOpen++;
}
int computedCountClosed = (end - start) / inc + 1;
int computedCountOpen = ((end - 1) - start) / inc + 1;
if (realCountClosed != computedCountClosed) {
System.out.println(
"Closed: " + realCountClosed + " " + computedCountClosed);
}
if (realCountOpen != computedCountOpen) {
System.out.println(
"Open: " + realCountOpen + " " + computedCountOpen);
}
}
}
最后一点。在 for 循环中pre
或post
值的增量(即 -- 或 ++)不会影响循环。while
如果增量是在循环的while
一部分中完成的,则循环不是这种情况。
推荐阅读
- rxjs - 不应该调用 RxJS iif 参数
- swashbuckle - 使用 Swashbuckle / Swagger 注释数组以具有 minItems
- loops - 有人可以解释一下这段代码在即将到来的测试中是如何工作的吗
- python - 在 matplotlib 时间序列“意大利面条”图中使线条变粗
- r - 使用 ggplot 为绘图中的线条子集着色
- javascript - 忽略聚合管道中 $match 阶段的字段
- python - 使用字符串变量名称作为 mongodb 集合名称
- java - 检查2个链接列表是否在java中包含相同值的问题
- office-addins - 如何向需要使用 OAuth 2.0 进行身份验证的 AppSource 提交加载项?
- java - Java - 如何在特定条件下获得最佳元素列表