] 1
我的同学认为现在是10岁,我知道现在是11岁。我无法正确解释它,所以有人想要试一试吗?
变量从10开始。每次传递时,变量递减1,并且当x不大于0时,循环退出。因此,当x变为0时,循环退出。所以它发生在10到0之间。这是11次。
答案 0 :(得分:2)
这可能比您想知道的要多,但您到这里去。
您的示例与<class 'abc.ABCMeta'>
大多数循环都有一个开始,结束和一个增量。 (我不会说for (x = 10; x < 0; x--);
,因为有人会提出一个晦涩的例子来证明我做错了)。
对于for循环,有两种情况需要考虑。
for(x =开始; x <=结束; x + = inc); //我称其为封闭状态
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
。