DAY3

    
2006/8/24            file类 和      递归
File是文件名,目录名,其中主要的方法为。
1:isDirectory();是否是所给的路径是文件还是目录。
2:length();返回文件大小。
3:listFiles();返回目录中所有文件和目录。
4:exists();是否存在文件。
5:getName();得到文件名。
6:getPath();得到文件路径。
Import:
A:String args[];数组是指开始在内存申请空间。即原始空间。
 题目:目录和文件的显示。
(个人想法)一般思路:
{Arrays.Sort(list,new FileNameSorter());对文件对象排序,必须规定目录比文件“小”
        for( )从内存中对 文件名称;
        if( ) 判断路径是文件还是目录;
        else( )否则直接打印出list[i]
        }
        {
构造对象File确定目录。
判断原始内存长度
File=new File(args[0]);
判断文件是否存在和路径是否是文件还是目录。
}
递归~~~首先得解决超出内存的问题。OutofMemoryError异常(不能被解决) 。不需要try( )catch( )是指错误可以被解决。
比如:public class Bat
{
                  public static void main(String args[])
                        {
                               byte [] BT = new byte[100*1024*1024];//内存空间不够回产生益处
                               System.out.println(BT);
                           }
}
通俗的就说就是,自己调用自己。递归能解决循环问题,每调用一次,减少一次的思想。
其中还有个重点~~~利用了堆栈的原理,(这在第三例子的display()方法)。
!!!!!!!其次有两个很重要的解决方案:
1:做这次任务的关键算法,和推算出关键步骤下步的值。
2:将值传给下一级算法,然后调用关键算法。
今天必须代码:
1:公约数和2:移盘 3:打印目录
第一题目
//实现公约数既数学。12与3的公约数是12-3=9,9-3=6,6-3=3,3-3=0,公约数为3
public class YueShu
{
       public static int ys(int num1,int num2)
        {
             if(num1 == num2 )
             {
                return num1;
             }
              return ys(abs(num1-num2),min(num1,num2));//经典的地方,递归!
             }
      public static int abs(int num)
        {
            return (num<0 ? -num : num);//判断绝对值
        }
      public static int min(int num1,int num2)
       {
               return (num1<num2 ? num1 : num2);//返回最小值
       }
     public static void main(String args[])
      {
              System.out.println(ys( 54,12));
    }
}
 
第2题目
//意思为移木积
public class YiMoKuai
{
       public static void YiFa(int n,String a,String b,String c)
        {
          if(n == 1)
            {
               System.out.println(1+a+"-->"+c);
               return;
            }
        YiFa(n-1,a,c,b);//经典代码,递归
        Move(n,a,c);
        YiFa(n-1,b,a,c);     
      }
    public static String Move(int n,String a,String c)
     {
          return (n+a+"-->"+c);
      }
   public static void main(String args[])
     {
               YiFa(4,"A","B","C")
               //System.out.println( YiFa(4,"A","B","C"));此出不可以打印,因为void的类型没有返回值
         }
}
 
第3题目:本人不会做,只能理解它,看了两天,还要接着看。
import java.io.File;
class MainClass
{
 public static void main(String [] args)
 {
   String strFile = "..";//目的是为了设目录起始位置
   if(args.length != 0)//判断原始内存长度是否为0
   {
    strFile = args[0];//使原始内存替代目录,这样的作用是为了方便人们指定目录
   }
 
   File fFile = new File(strFile);//创建目录名对象
   /*display(fFile);*/
   new FileWrapper(fFile,false,null).display();//调用继承类方法,最后的null是指容器空
 
 }
 
 /*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;//设置判断值 代表最后元素没有就为false
 FileWrapper parent = null;//处始化parent即文件名
 public boolean isLast()//这句代码就是判断是否是最后
 {
     return bLast;
 }
 
 public FileWrapper getParentWrapper()//返回类型FileWrapper注意
 {
 return parent;//返回文件名
 }
 
 public FileWrapper(File f,boolean bLast,FileWrapper parent)//注意~boolean必须用对象的模式传
 {//构造方法,参数是文件对象,
   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();//递归
      }
     }
   }
 }
}
个人理解的思路:见笑,见笑,
一开始就要思考用什么来代替最后一个目录文件名 很重要的思想用boolean来代替为最后一个文件名 对于继承类则File的方法有些得张开和重写
在继承的类中实现两个方法,一个构造,两个返回,
第一个方法解决“树”状的打印,(树的主干)
第2个方法解决文件名的查找打印
 
构造方法实现File类的扩展
 
返回1是树状的分支
返回2是文件名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值