递归:
概述:方法自己调用自己
举例:老和尚和小和尚、放羊娃
注意事项;
1.递归不能调用次数过多,否者容易导致栈内存溢出。
2.递归要有出口,否者容易导致栈内溢出。
3。构造方法不能递归。
代码案例:
packagecom.zihai.digui;
importjava.io.File;
importjava.lang.reflect.Field;
public classTestprint {
public static void main(String[] args) {
/**
* 打印指定文件夹下所有的文件(夹)的名字
* 思路:
* 1.通过File#listFiles()获取到指定的文件下所有的File[].
* 2.遍历第一步获取到的File[],获取到每一个File对象
* 3.判断当前遍历到的File对象是文件还是文件夹,
* 是文件:就直接打印
* 是文件夹:就递归
*/
File dir=new File("d:\\软件学习相关");
print(dir);
}
public static void print(File dir){
//1
File[] listFiles=dir.listFiles();
//2
for(File file:listFiles){
//3如果是文件,就打印
if(file.isFile()){
System.out.println(file.getName());
//是文件夹,就递归
}else{
print(file);
}
}
}
}
packagecom.zihai.digui;
importjava.io.File;
importjava.lang.reflect.Field;
importjava.util.Scanner;
public classTestprint {
public static void d(String[] args) {
/**
* 打印指定文件夹下所有的文件(夹)的名字
* 思路:
* 1.通过File#listFiles()获取到指定的文件下所有的File[].
* 2.遍历第一步获取到的File[],获取到每一个File对象
* 3.判断当前遍历到的File对象是文件还是文件夹,
* 是文件:就直接打印
* 是文件夹:就递归
*/
//File dir=new File("d:\\软件学习相关");
File dir=getDir();
print(dir);
}
/*
* 获取用户录入的文件夹路径
*/
public static File getDir(){
//创建键盘录入对象
Scanner sc=new Scanner(System.in);
System.out.println("输入查找文件夹路径");
//因为不知道用户多次次录入正确,所以用while循环改进
while(true){
//接收用户录入的内容
String line =sc.nextLine();
//将用户录入的内容封装成File对象
File dir=new File(line);
//如果用户的录入的不是文件夹,就提示用户从新录入
if(!dir.isDirectory()){
System.out.println("你录入的不是文件夹,请重新录入");
}else{
//如果用户录入的是文件夹,就直接return
return dir;
}
}
}
/*
* 获取用户录入文件夹路径
*
*/
public static void print(File dir){
//1
File[] listFiles=dir.listFiles();
//2
for(File file:listFiles){
//3如果是文件,就打印
if(file.isFile()){
System.out.println(file.getName());
//是文件夹,就递归
}else{
print(file);
}
}
}
}