public class Test1 {
static boolean foo(char c)
{
System.out.print(c);
return true;
}
public static void main(String args[])
{
int i=0;
for(foo('A');foo('B')&&(i<2);foo('C'))
{
i++;
foo('D');
}
}}
static boolean foo(char c)
{
System.out.print(c);
return true;
}
public static void main(String args[])
{
int i=0;
for(foo('A');foo('B')&&(i<2);foo('C'))
{
i++;
foo('D');
}
}}
函数就不解释了,无非就是传入一个字符,然后把这个字符打印出来并返回true而已。int i = 0;//初始化i=0;
//下面的第一个foo("a");调用foo函数,这样会打印出来一个a,并且这里只会调用一次,例如平常写的i=0;只有第一次进入时起作用。
//第二个foo('b');每次循环之前都会调用,哪怕这次不能进入for循环,所以他紧接a之后打印一个b。
//第三个foo('c');每次进入循环并且执行完毕后调用,所以,如果进入循环肯定会调用它,如果没进入循环就不会调用它,跟上面的不一样哦,上面第二个foo会比这个多调用一次。
//第四个foo('d');更简单了,只有进入for循环才会调用。
for (foo('a'); foo('b') && (i < 2); foo('c'))
{
i++;
foo('d');
}
所以调用结果如下:
foo('a');只调用一次
foo('b');会调用三次,i=0时一次i=1时i=2时各一次
foo('c');会调用两次,i=0时和i=1时
foo('d');同样调用两次,i=0和i=1 已经有人问过一次了,同样的代码,我再给解释一遍吧哈哈!
然后执行f(‘B’)&&i<2 打印B 此时i=0,所以i<2成立
执行循环体的内容,即是i++ 和 foo(‘D’) 后
i=1 然后打印D
后面就是foo("C") 然后再再执行foo(‘B’)&&i<2
此时由于i=1 还是小于2的所以 所以循环体里的还要执行一次
然后i=2
接着还是上面那顺序 但是到i<2时 不成立 就退出循环了
所以打印就是:ABDCBDCB
这个只要知道for里面语句的执行顺序就可以了
for(a;b;c)d;a:初始条件,仅在循环开始前运行一次,返回类型不限。
b:循环条件,每次循环前作为是否进入循环节的入口测试,返回值必须是boolean型。非死循环条件下会比循环节多运行一次(作为循环出口测试)。易知例题中会运行3次(i=0,1,2)
PS:其实这里还可以加入个短路逻辑的知识点,foo('B')&&(i<2)与(i<2)&&foo('B')情况会不同。
c:有的书本上称之为“步长值”,其实质是循环节的尾部,只是为了更接近人的思维习惯而增加的部分,运行次数与循环节d相同(且在d后执行)。返回类型不限。
d:循环节,与c一起构成循环的主体部分,可以是单语句或语句块。非死循环条件下比b少运行1次。例题中运行2次(i=0,1)。掌握了上面知识一眼就可以看出命题的输出是:
ABDCBDCB