本帖最后由 sxhs1986 于 2011-04-27 05:26:13 编辑

解决方案 »

  1.   

    最简单的方法,将
            System.out.println("本项目代码有:" + wordCont + "行");
            System.out.println("本项目注释有:" + starCont + "行");
            System.out.println("本项目空白有:" + whiteCont + "行");
    这三行语句放到main方法中,checkFile方法后,而不是checkFile方法中。如果一定想放在checkFile方法中,还有两种做法
    1 建另一个函数,负责调用checkFile即三行println语句
    or
    2 在checkFile方法中设局部变量记录递归深度,深度为0的时候才执行三行println语句。
      

  2.   

    是的,就是包,比如:F:\javase\cal\src\org\crazyit\cal    最后的一个文件夹才放着.java文件!F:\javase\cal\下面放着2个文件夹:一个是bin一个是src
      

  3.   

    main跟建立另外函数调用都,测试可行,
    第三个办法在在checkFile方法中设局部变量记录递归深度,深度为0的时候才执行三行println语句。
    这个不会,能为我解答下这个吗?感觉着个很有趣!
      

  4.   


    就是说,你开始的时候用一个变量作为深度(例如:dep),当你递归调用的时候如果是在第一层里面的文件夹就把dep=1,如果一个文件夹,递归进去时,dep的值改为2,如此类推
    如果在第二层里面出来时,将dep的值改为1这样,最后当第一层的文件都读完,将dep=0(相当于翻回上一层)
      

  5.   

    代码示意如下:public class CodeTools {    private int depth = 0;
    ...
        public void checkFile(String path) {//遍历文件夹(用了递归)
          depth++;  //进checkFile方法首先增深度
           ...
            checkFile(subpath); //递归调用
           depth--;  //出checkFile方法前减深度
           if (depth==0){  //深度为0即为最外层递归调用
              打印三个统计结果
           }
        }
    ...
    }