代码改变世界

8月24日培训日记

2006-08-24 17:40  java ee spring  阅读(176)  评论(0编辑  收藏  举报

1.大数组导致虚拟机OutOfMemmoryError。
2.什么是递归调用,举例,递归调用导致堆栈耗尽。递归一要调用到一定深度后停止下来,
3.用递归方法实现十进制数到二进制数的转换。先通过如何求出一个十进制中的每位数字来说明.递归适合于解决需要反复循环的业务流程,每循环一次,任务就减少一个回合。
4.当前正在运行的函数只管解决一个回合的问题,其他的调用再由这个函数解决,只是传递的参数是下一个回合所要的参数,当前含数的一个重要任务就是找出下一次调用的参数。
5.求最大公约数的例子
6.汉诺塔举例
7.要通过执行ant的命令行窗口给build.xml文件中的java任务执行的类传递参数,怎么做?
 
9.tree命令程序的编写.tree结果的特点:如果列表中一个目录或文件有弟弟,那么它前面加“├─”,否则,它前面加“└─”,如果是根元素,那么前面什么也不加。如果它的父级没有弟弟,则在父级上补“    ”,否则,在父级上补“│  ”。如果父级没有父级,即父级为整个元素的根,则什么也不补,且结束结束递归调用。下面的代码用到了装饰器模式和访问者模式,请解释清楚这两种模式。
程序清单:MyTree.java

import java.io.File;
class MainClass
{
 public static void main(String [] args)
  {
   String strFile = ".";
   if(args.length != 0)
   {
    strFile = args[0];
   }
 
   File fFile = new File(strFile);
   /*display(fFile);*/
   new FileWrapper(fFile,false,null).display();
 
  }
 
  /*public static void display(File f)
  {
   System.out.println(f.getName());
   if(f.isDirectory())
   {
     File [] subFiles = f.listFiles();
     for(int i=0;i<subFiles.length;i++)
     {
      display(subFiles[i]);
    }
   }
  }*/
}

class FileWrapper extends File
{
  boolean bLast = false;
  FileWrapper parent = null;
 public boolean isLast()
 {
     return bLast;
 }
 
 public FileWrapper getParentWrapper()
 {
  return parent;
 }
 
  public FileWrapper(File f,boolean bLast,FileWrapper parent)
  {
   super(f.getPath());
   this.bLast = bLast;
   this.parent = parent;
  }
 
  private String makePrefix()
  {
   StringBuffer sbf = new StringBuffer();
   if(parent == null)
   {
    return "";
   }
  
   if(bLast)
   {
    sbf.append("─└");
   }
   else
   {
    sbf.append("─├");
   }
  
   makeParentPrefix(parent,sbf);
   sbf.reverse();
   return sbf.toString();
 }
 
 private void makeParentPrefix(FileWrapper parent,StringBuffer sbf)
 {
   if(parent.getParentWrapper() != null)
   {
     if(parent.isLast())
     {
      sbf.append("    ");
     }
     else
     {
      sbf.append("  │");
     }
     makeParentPrefix(parent.getParentWrapper(),sbf);
   }
  }
 
  public void display()
  {
   System.out.println(makePrefix() + /*this.*/getName());
   if(this.isDirectory())
   {
     File [] subFiles = this.listFiles();
     for(int i=0;i<subFiles.length;i++)
     {
      if(i < subFiles.length-1)
      {
        new FileWrapper(subFiles[i],false,this).display();
      }
      else
      {
        new FileWrapper(subFiles[i],true,this).display();
      }
     }
   }
  }
}

运行结果如图所示:

 作业:列出一个目录及其子目录下的所有txt文件。