JAVASE基礎-day23(遞迴練習)
23.01_File類遞迴練習(統計該資料夾大小)
- 需求:1,從鍵盤接收一個資料夾路徑,統計該資料夾大小
package com.heima.test;
import java.io.File;
import java.util.Scanner;
public class Test1 {
/**
* @param args
* 需求:1,從鍵盤接收一個資料夾路徑,統計該資料夾大小
*
* 從鍵盤接收一個資料夾路徑
* 1,建立鍵盤錄入物件
* 2,定義一個無限迴圈
* 3,將鍵盤錄入的結果儲存並封裝成File物件
* 4,對File物件判斷
* 5,將資料夾路徑物件返回
*
* 統計該資料夾大小
* 1,定義一個求和變數
* 2,獲取該資料夾下所有的檔案和資料夾listFiles();
* 3,遍歷陣列
* 4,判斷是檔案就計算大小並累加
* 5,判斷是資料夾,遞迴呼叫
*/
public static void main(String[] args) {
//File dir = new File("F:\\day06");
//System.out.println(dir.length()); //直接獲取資料夾的結果是0
File dir = getDir();
System.out.println(getFileLength(dir));
}
/*
* 從鍵盤接收一個資料夾路徑
* 1,返回值型別File
* 2,引數列表無
*/
public static File getDir() {
//1,建立鍵盤錄入物件
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個資料夾路徑:");
//2,定義一個無限迴圈
while(true) {
//3,將鍵盤錄入的結果儲存並封裝成File物件
String line = sc.nextLine();
File dir = new File(line);
//4,對File物件判斷
if(!dir.exists()) {
System.out.println("您錄入的資料夾路徑不存在,請輸入一個資料夾路徑:");
}else if(dir.isFile()) {
System.out.println("您錄入的是檔案路徑,請輸入一個資料夾路徑:");
}else {
//5,將資料夾路徑物件返回
return dir;
}
}
}
/*
* 統計該資料夾大小
* 1,返回值型別long
* 2,引數列表File dir
*/
public static long getFileLength(File dir) { //dir = F:\day06\day07
//1,定義一個求和變數
long len = 0;
//2,獲取該資料夾下所有的檔案和資料夾listFiles();
File[] subFiles = dir.listFiles(); //day07 Demo1_Student.class Demo1_Student.java
//3,遍歷陣列
for (File subFile : subFiles) {
//4,判斷是檔案就計算大小並累加
if(subFile.isFile()) {
len = len + subFile.length();
//5,判斷是資料夾,遞迴呼叫
}else {
len = len + getFileLength(subFile);
}
}
return len;
}
}
23.02_File類遞迴練習(刪除該資料夾)
- 需求:2,從鍵盤接收一個資料夾路徑,刪除該資料夾
package com.heima.test;
import java.io.File;
public class Test2 {
/**
* 需求:2,從鍵盤接收一個資料夾路徑,刪除該資料夾
*
* 刪除該資料夾
* 分析:
* 1,獲取該資料夾下的所有的檔案和資料夾
* 2,遍歷陣列
* 3,判斷是檔案直接刪除
* 4,如果是資料夾,遞迴呼叫
* 5,迴圈結束後,把空資料夾刪掉
*/
public static void main(String[] args) {
File dir = Test1.getDir(); //獲取資料夾路徑
deleteFile(dir);
}
/*
* 刪除該資料夾
* 1,返回值型別 void
* 2,引數列表File dir
*/
public static void deleteFile(File dir) {
//1,獲取該資料夾下的所有的檔案和資料夾
File[] subFiles = dir.listFiles();
//2,遍歷陣列
for (File subFile : subFiles) {
//3,判斷是檔案直接刪除
if(subFile.isFile()) {
subFile.delete();
//4,如果是資料夾,遞迴呼叫
}else {
deleteFile(subFile);
}
}
//5,迴圈結束後,把空資料夾刪掉
dir.delete();
}
}
23.03_File類遞迴練習(拷貝)
- 需求:3,從鍵盤接收兩個資料夾路徑,把其中一個資料夾中(包含內容)拷貝到另一個資料夾中
package com.heima.test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test3 {
/**
* 需求:3,從鍵盤接收兩個資料夾路徑,把其中一個資料夾中(包含內容)拷貝到另一個資料夾中
*
* 把其中一個資料夾中(包含內容)拷貝到另一個資料夾中
* 分析:
* 1,在目標資料夾中建立原資料夾
* 2,獲取原資料夾中所有的檔案和資料夾,儲存在File陣列中
* 3,遍歷陣列
* 4,如果是檔案就用io流讀寫
* 5,如果是資料夾就遞迴呼叫
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File src = Test1.getDir();
File dest = Test1.getDir();
if(src.equals(dest)) {
System.out.println("目標資料夾是原始檔夾的子資料夾");
}else {
copy(src,dest);
}
}
/*
* 把其中一個資料夾中(包含內容)拷貝到另一個資料夾中
* 1,返回值型別void
* 2,引數列表File src,File dest
*/
public static void copy(File src, File dest) throws IOException {
//1,在目標資料夾中建立原資料夾
File newDir = new File(dest, src.getName());
newDir.mkdir();
//2,獲取原資料夾中所有的檔案和資料夾,儲存在File陣列中
File[] subFiles = src.listFiles();
//3,遍歷陣列
for (File subFile : subFiles) {
//4,如果是檔案就用io流讀寫
if(subFile.isFile()) {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));
BufferedOutputStream bos =
new BufferedOutputStream(new FileOutputStream(new File(newDir,subFile.getName())));
int b;
while((b = bis.read()) != -1) {
bos.write(b);
}
bis.close();
bos.close();
//5,如果是資料夾就遞迴呼叫
}else {
copy(subFile,newDir);
}
}
}
}
23.04_File類遞迴練習(按層級列印)
需求:4,從鍵盤接收一個資料夾路徑,把資料夾中的所有檔案以及資料夾的名字按層級列印, 例如:
aaa是資料夾,裡面有bbb.txt,ccc.txt,ddd.txt這些檔案,有eee這樣的資料夾,eee中有fff.txt和ggg.txt,打印出層級來
aaa
bbb.txt
ccc.txt
ddd.txteee fff.txt ggg.txt
package com.heima.test;
import java.io.File;
public class Test4 {
/**
* 需求:4,從鍵盤接收一個資料夾路徑,把資料夾中的所有檔案以及資料夾的名字按層級列印, 例如:
* 把資料夾中的所有檔案以及資料夾的名字按層級列印
* 分析:
* 1,獲取所有檔案和資料夾,返回的File陣列
* 2,遍歷陣列
* 3,無論是檔案還是資料夾,都需要直接列印
* 4,如果是資料夾,遞迴呼叫
* day07
* day08
* xxx.jpg
* yyy.txt
* Demo1_Consturctor.class
* Demo1_Consturctor.java
* Demo1_Student.class
* Demo1_Student.java
*/
public static void main(String[] args) {
File dir = Test1.getDir(); //獲取資料夾路徑
printLev(dir,0);
}
public static void printLev(File dir,int lev) {
//1,把資料夾中的所有檔案以及資料夾的名字按層級列印
File[] subFiles = dir.listFiles();
//2,遍歷陣列
for (File subFile : subFiles) {
for(int i = 0; i <= lev; i++) {
System.out.print("\t");
}
//3,無論是檔案還是資料夾,都需要直接列印
System.out.println(subFile);
//4,如果是資料夾,遞迴呼叫
if(subFile.isDirectory()) {
//printLev(subFile,lev + 1);
printLev(subFile,++lev);
}
}
}
}
23.05_遞迴練習(斐波那契數列)
- 不死神兔
- 故事得從西元1202年說起,話說有一位義大利青年,名叫斐波那契。
- 在他的一部著作中提出了一個有趣的問題:假設一對剛出生的小兔一個月後就能長成大兔,再過一個月就能生下一對小兔,並且此後每個月都生一對小兔,一年內沒有發生死亡,
- 問:一對剛出生的兔子,一年內繁殖成多少對兔子?
- 1 1 2 3 5 8 13
- 第一個月一對小兔子 1
- 第二個月一對大兔子 1
- 第三個月一對大兔子生了一對小兔子 2
- 第四個月一對大兔子生了一對小兔子
- 一對小兔子長成大兔子 3
- 第五個月兩對大兔子生兩對小兔子
- 一對小兔子長成大兔子 5
package com.heima.test;
public class Test5 {
/**
* * 不死神兔
* 故事得從西元1202年說起,話說有一位義大利青年,名叫斐波那契。
* 在他的一部著作中提出了一個有趣的問題:假設一對剛出生的小兔一個月後就能長成大兔,再過一個月就能生下一對小兔,並且此後每個月都生一對小兔,一年內沒有發生死亡,
* 問:一對剛出生的兔子,一年內繁殖成多少對兔子?
* 1 1 2 3 5 8 13 21
* 1 = fun(1)
* 1 = fun(2)
* 2 = fun(1) + fun(2)
* 3 = fun(2) + fun(3)
*/
public static void main(String[] args) {
//demo1();
System.out.println(fun(12));
}
public static void demo1() {
//用陣列做不死神兔
int[] arr = new int[8];
//陣列中第一個元素和第二個元素都為1
arr[0] = 1;
arr[1] = 1;
//遍歷陣列對其他元素賦值
for(int i = 2; i < arr.length; i++) {
arr[i] = arr[i - 2] + arr[i - 1];
}
//如何獲取最後一個數
System.out.println(arr[arr.length - 1]);
}
/*
* 用遞迴求斐波那契數列
*/
public static int fun(int num) {
if(num == 1 || num == 2) {
return 1;
}else {
return fun(num - 2) + fun(num - 1);
}
}
}
23.06_遞迴練習(1000的階乘所有零和尾部零的個數)
- 需求:求出1000的階乘所有零和尾部零的個數,不用遞迴做
23.07_遞迴練習(1000的階乘尾部零的個數)
- 需求:求出1000的階乘尾部零的個數,用遞迴做
23.08_集合練習(約瑟夫環)
- 幸運數字
package com.heima.test;
import java.util.ArrayList;
public class Test8 {
/**
* @param args
* 約瑟夫環
* * 幸運數字
*/
public static void main(String[] args) {
System.out.println(getLucklyNum(8));
}
/*
* 獲取幸運數字
* 1,返回值型別int
* 2,引數列表int num
*/
public static int getLucklyNum(int num) {
ArrayList<Integer> list = new ArrayList<>(); //建立集合儲存1到num的物件
for(int i = 1; i <= num; i++) {
list.add(i); //將1到num儲存在集合中
}
int count = 1; //用來數數的,只要是3的倍數就殺人
for(int i = 0; list.size() != 1; i++) { //只要集合中人數超過1,就要不斷的殺
if(i == list.size()) { //如果i增長到集合最大的索引+1時
i = 0; //重新歸零
}
if(count % 3 == 0) { //如果是3的倍數
list.remove(i--); //就殺人
}
count++;
}
return list.get(0);
}
}
相關推薦
JAVASE基礎-day23(遞迴練習)
23.01_File類遞迴練習(統計該資料夾大小) 需求:1,從鍵盤接收一個資料夾路徑,統計該資料夾大小 package com.heima.test; import java.io.File; import java.util.Scanner;
File類遞迴練習+JAVA學習筆記-DAY23
23.01_File類遞迴練習(統計該資料夾大小) 需求:1,從鍵盤接收一個資料夾路徑,統計該資料夾大小 import java.io.File; import java.util.Scanner; public class Test1 { /** * @param
javaSE (三十四)File類和遞迴練習(統計資料夾大小、拷貝資料夾、層級列印資料夾、斐波拉契數列、獲取1000階乘全部0和尾部0數目、約瑟夫環)
1、統計資料夾大小: 思路: 套用之前已經做過的,鍵入一個路徑,若有效則封裝成File類 初始化計數器len, 若資料夾下是檔案,則記錄檔案.length() 若資料夾下是資料夾,遞迴 輸出len 注:遞迴也可以刪除資料夾,但是一定要先刪除裡
Java遞迴練習
public class TestDiGui { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(f(5));
python3基礎(七)-遞迴函式和匿名函式
1、遞迴函式 函式內呼叫自己本身函式,就叫做遞迴函式。 計算一個數字的階乘n!=1*2*3*4*......*n 公式演變: n! = 1 * 2 * 3 * 4 * ...... * (n - 2) * (n - 1) * n = n * (n - 1) * (n - 2) *
java基礎篇———————— 遞迴控制及漢諾塔
一: 遞迴控制: 1:遞迴:就是程式一層一層呼叫自身,從而將問題規模層層減小,解除結果; (1)遞迴必須要滿足的兩個條件: .子問題須與原始問題為同樣的事,且更為簡單; .不能無限制地呼叫本身,須有個出口,化簡為非遞迴狀況處理。 ( 2 )遞迴的優缺點: 優點: 遞迴語句簡單。 缺點:遞迴是
java:遞迴練習(1000的階乘尾部零的個數)
public class Test7 { public static void main(String[] args) { System.out.println(fun(1000)); } public static int fun(int num) { if(num&g
java:遞迴練習(斐波那契數列)
package com.heima.test; public class Test5 { public static void main(String[] args) { demo1(); System.out.println(fun(8)); } //使用陣列求斐波那契數列
java:File類遞迴練習(按層級列印)
從鍵盤接收一個資料夾路徑,把資料夾中的所有檔案以及資料夾的名字按層級列印, 例如: aaa是資料夾,裡面有bbb.txt,ccc.txt,ddd.txt這些檔案,有eee這樣的資料夾,eee中有fff.txt和ggg.txt,打印出層級來 &nb
java:File類遞迴練習(拷貝)
從鍵盤接收兩個資料夾路徑,把其中一個資料夾中(包含內容)拷貝到另一個資料夾中 package com.heima.test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; imp
java:File類遞迴練習(刪除該資料夾)
從鍵盤接收一個資料夾路徑,刪除該資料夾 package com.heima.test; import java.io.File; import java.util.Scanner; public class Test2 { public static void main(String
java:File類遞迴練習(統計該資料夾大小)
package com.heima.test; import java.io.File; import java.util.Scanner; public class Test1 { public static void main(String[] args) { File dir=
python(基礎--模組[遞迴])
模組(是一個名稱空間,也是一個模組物件) 補充:容器 ->資料的封裝 函式 ->語句的封裝 類 ->方法和屬性的封裝 含義:模組是一個包含所有你定義的函式和變數的檔案,其後綴名是.py。模組可以被別的程式引入,以使用該模組中的函式等功能。這也是使用 python 標準庫的方
23 遞迴練習
練習一 /** * 需求:1,從鍵盤接收一個資料夾路徑,統計該資料夾大小 * * 從鍵盤接收一個資料夾路徑 * 1,建立鍵盤錄入物件 * 2,定義一個無限迴圈 * 3,將鍵盤錄入的結果儲存並封裝成File物件 * 4,對File物件判斷 * 5,將資料夾
python全棧筆記-day06-遞迴練習
#遞迴練習 menus = [ {'text':'北京','children':[ {'text':'朝陽','children':[]}, {'text':'昌平','children':[ {
Python基礎14_遞迴函式,二分查詢
一. 遞迴 在函式中呼叫函式本身, 就是遞迴 prthon中遞迴的最大深度是998 def func(n)
函式程式設計實驗二:遞迴練習
module HW where {- 1. 定義求兩個非負整數最大公因子的函式: mygcd ::Integer ->Integer ->Integer -} mygcd ::Integer ->Integer ->Integer my
JavaSE基礎(day23)(1)設計模式
默寫: 1.建立 Class物件的四種方式 2.通過Class 物件 如何建立對應的java型別的例項? newInstance() 最終呼叫構造方法 3.如何通過Class 物件獲取建構函式型別的物件 如何獲得欄位型別的物件 如何獲取方法型別的物件 getConstructor get
遞迴練習題目
練習題目 寫一個函式,接受一串字串,返回一個字串,這個字串是將原來字串倒過來。 寫一個函式,接受一串字串,同時從前後開始拿一位字元對比,如果兩個相等,返回 true,如果不等,返回 false。 編寫一個函式,接受一個數組,返回扁平化新陣列。 編寫一個函式,接受一個
C語言基礎篇——遞迴函式
一、定義 直接或間接呼叫函式本身,則該函式稱為遞迴函式 二、兩個要點 (1)趨近於一個臨界值 (2)呼叫自己本身 三、舉例 (1)求n! int Fun(int n) { int tmp=n; if(n==1)//臨界值 { tmp=n; return