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');
}
}}

解决方案 »

  1.   

    这道题的意思应该是告诉你for循环执行的顺序是首次进入for循环 执行 foo('A');然后判断foo('B') 为true 执行 foo('D');进入下次循环前执行 foo('C') 再判断 foo('B') 
      

  2.   

    运行结果:a-b-d-c-b-d-c-b;
    函数就不解释了,无非就是传入一个字符,然后把这个字符打印出来并返回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 已经有人问过一次了,同样的代码,我再给解释一遍吧哈哈!
      

  3.   

    首先for循环里首先执行foo(‘A’)打印
    然后执行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里面语句的执行顺序就可以了
      

  4.   

    这个不难理解吧,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
      

  5.   

    由于foo() 永远返回TRUE,对循环终止真正起作业的实际上就是 (i<2),在循环条件中调用foo() 就是为了执行foo('A'), foo('B'), foo('C'), 与把这些语句放在循环体内效果基本一样。
      

  6.   

    谢谢大家 刚开始学太死板了 现在一看确实只是考察一下for循环的顺序 谢谢大家了
      

  7.   

    谢谢大家 刚开始学太死板了 现在一看确实只是考察一下for循环的顺序 谢谢大家了