以下循环迭代多少次?

时间:2019-10-20 16:36:19

标签: java loops iteration

] 1

我的同学认为现在是10岁,我知道现在是11岁。我无法正确解释它,所以有人想要试一试吗?

变量从10开始。每次传递时,变量递减1,并且当x不大于0时,循环退出。因此,当x变为0时,循环退出。所以它发生在10到0之间。这是11次。

2 个答案:

答案 0 :(得分:2)

这可能比您想知道的要多,但您到这里去。

您的示例与<class 'abc.ABCMeta'>

没什么不同

大多数循环都有一个开始,结束和一个增量。 (我不会说for (x = 10; x < 0; x--);,因为有人会提出一个晦涩的例子来证明我做错了)。

对于for循环,有两种情况需要考虑。

  1. for(x =开始; x <=结束; x + = inc); //我称其为封闭状态

  2. for(x =开始; x <结束; x + inc); //我将其称为open

对于闭环,次数计算为:

all loops

开环比较复杂,因为必须从中减去1 (end-start)/inc + 1 强制其为end循环。可以计算为

closed

如果您更改(end-1-start)/inc + 1 start的位置并进行增量end,这同样适用。

在您的情况下为(10-1-0)/ 1 +1 = 10。

下面是一些测试代码,可用于检查每种循环类型。

decrement

最后的笔记。在for循环中,值 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); } } } pre的增量(即-或++)不会影响循环。如果增量是在循环的post部分完成的,则while循环就不是这种情况。

答案 1 :(得分:0)

以下循环恰好重复10次,将x的值从10打印到1。当x = 0时,循环停止循环,因为0不大于0。递减程序在循环10次后在x--中进行。因为循环正好重复10次,所以x的值先被打印,然后递减1、10次。因此,最后,x的最终值为0,而正在打印的x 的最后一个值1