请写出count1和count2的结果,并说明理由。package test;public class Test {

    int count=0;
public void testMet1(){
    count++;  
    System.out.println("count1--> "+count);
    testMet2(count);     
}

public void testMet2(int count){
    if(count<3){
        testMet1();
    }
    System.out.println("count2--> "+count);
}

public static void main(String[] args) {
Test t = new Test();
t.testMet1();
}
}

解决方案 »

  1.   

    程序改成这样,是等价的,不要被testme2里面的count混淆了。
    testme2里面的count不是外面的那个,也不是testme1里面的那个。 public void testMet2(int c){
        if(c<3){
            testMet1();
        }
        System.out.println("count2--> "+c);
    }
      

  2.   

    新版本的:
    package test;public class Test {

        int count1=0;
    public void testMet1(){     
        count1++;  
        System.out.println("count1--> "+count1);
        testMet2(count1);     
    }

    public void testMet2(int count2){
        if(count2<3){
            testMet1();
        }
        System.out.println("count2--> "+count2);
    }

    public static void main(String[] args) {
    Test t = new Test();
    t.testMet1();
    }
    }
      

  3.   

    count1-->1
    count1-->2
    count1-->3
    count2-->3
    没测试,只是猜想...
      

  4.   

    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 3
    count2--> 2
    count2--> 1
      

  5.   

    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 3
    count2--> 2
    count2--> 1
      

  6.   

    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 3
    count2--> 2
    count2--> 1
      

  7.   

    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 3
    count2--> 2
    count2--> 1为啥腻,不明白了。有答案知会一下[email protected]
      

  8.   

    count2--> 2
    count2--> 1这两个为什么打印出来了?
      

  9.   

    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 3
    count2--> 2
    count2--> 1
      

  10.   

    count2--> 2
    count2--> 1这两个为什么打印出来了?testMet2被调用了3次
     count==1时,System.out.println("count2--> "+count);还没执行便开始递归调用testMet1.count=2时同理.直到count==3时不再调用testMet1,count2--> 3打出.函数返回到testMet2(2),再到testMet2(1)
      

  11.   

    那为什么是:
    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 3
    count2--> 2
    count2--> 1
    而不是:
    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 1
    count2--> 2
    count2--> 3
    呢?堆栈?
    count2--> 1
    count2--> 2
    count2--> 3
    要说出它们打印的过程?
      

  12.   

    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 3
    count2--> 2
    count2--> 1这个原理很类似低归调的原理
      

  13.   

    pengtao_2005(地平线)哥们好样的,嘴个~~~~~~~
      

  14.   

    有点明白了!当count2 = 3的时候 不再执行test1 然后就转回到count2 = 2时打印count2-->2
    打印后再转回到count2 = 1时 打印出count2-->1递归调用结束 退出是这意思不?
      

  15.   

    public class Test {

        int count1=0;
    public void testMet1(){     
        count1++;  
        System.out.println("count1--> "+count1);
        testMet2(count1);
        System.out.println("count3----> "+count1);
    }

    public void testMet2(int count2){
        if(count2<3){
            testMet1();
        }
        System.out.println("count2--> "+count2);
    }

    public static void main(String[] args) {
    Test t = new Test();
    t.testMet1();
    }
    }那count3是怎么回事
      

  16.   

    UP, 我的第一个反应就是
    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 3
    count2--> 2
    count2--> 1
    但是以为想的太简单,结果试了一下.晕~~~
      

  17.   

    结果1:
    1--1
    1--2
    1--3
    2--3
    2--2
    2--1
    因为 if 循环的执行过程是这样前程序体
    if(1){
    if(2){
    if(3){
    if(4){
    if(...){}
    }}}}
    后程序体
    (*这里的1、2、3、4跟本题没关系,仅仅是举粒子)结果2:
    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 3
    count3----> 3
    count2--> 2
    count3----> 3
    count2--> 1
    count3----> 3我只说一点大家就应该明白了
    count2:是方法testMet1(),通过testMet2(count1);付值过来的
    所以他随着循环而改变的
    count3:大家看看传递过来的值吗? 他就是count1本身,所以当他显示的时候他已经是3了,不会再改变了
      

  18.   

    回楼上的jacbo
    结果为
    count1--> 1
    count1--> 2
    count1--> 3
    count2--> 3
    count3----> 3
    count2--> 2
    count3----> 3
    count2--> 1
    count3----> 3
    count1 为1,2,3就不要我说了吧.然后到递归到testMet2(3)时,count2 为3.而为什么此时count3 也等于3呢,此时count的值因为前几次调用变成了3(count为类的成员变量).而count2那边的count与count3 里的count 是不一样的.count2那边可以想象成为一个副本而已.所以,在后几次递归时,count3的值它是始终不变的(等于类的成员变量的值).
      

  19.   

    这种问题简直就是。啥都不说了。没有任何意思想不清楚的debug一下走走过程就知道了。
      

  20.   

    楼上的,如果你去面试,遇到类似的问题。你说,等等我回家debug一把再来回答你,待你来的时候,他人早已上班了。没有任何意思,我看有相当部分人疑惑
      

  21.   

    执行过程是这样的:count=1时:
    test1:   push(1),pop(1)    执行一次    栈空
    test2:   push(1)           未执行      栈值:1
    打印结果: count1--> 1count=2时:
    test1:   push(2),pop(2)    执行一次    
    test2:   push(2)           未执行      栈值:2,1
    打印结果: count1--> 2count=3时:
    test1:   push(3),pop(3)    执行一次    
    test2:   push(3),pop(3)    执行一次    栈值:2,1
    打印结果: count1--> 3
    打印结果: count2--> 3
    此时,栈值为 2,1 (左边是栈顶),因为在count<3时,它test2一直没有得到执行的机会. 这时它继续执行,即pop(2):  打印结果: count2--> 2
    pop(1):  打印结果: count2--> 1
      

  22.   

    keblues(keblues)解释的很清楚,我个人觉得这段很简单的程序把java程序的执行过程和栈关联起来了,提醒我们要知其所然还要知其所以然,那我们了解的更深一些吧