【213天】黑馬程序員27天視頻學習筆記【Day23-下】

叨逼叨兩句

  1. 插。。沒辦成。又得等。
  2. 累死了。

23-04:按層級打印

  1. 注意那個lev的小細節
package com.test.demo001;

import java.io.File;
import java.util.Scanner;

/**
 * @author wangtao
 * 1. 獲取全部文件和文件夾,返回File數組。
 * 2. 遍歷該數組。
 * 3. 不管是文件仍是文件夾都直接打印。
 * 4. 若是是文件夾,遞歸調用。
 */
public class Demo013 {
    public static void main(String[] args) {
        File dir = getDir();
        printLev(dir,0);
    }
    
    public  static void printLev(File dir,int lev) {
        File[] subFiles = dir.listFiles();
        for (File subFile : subFiles) {
            for(int i = 0;i <= lev;i++){
                System.out.print("\t");
            }
            System.out.println(subFile);
            if(subFile.isDirectory()){
                printLev(subFile,lev + 1); //此處不能使用lev++和++lev,他們都會改變lev的值
            }
        }
    }
    

    public static File getDir(){
        //1. 建立鍵盤錄入對象
        Scanner sc = new Scanner(System.in);
        //2. 定義一個無限循環
        while(true){
            System.out.println("請輸入文件夾路徑:");
            String line = sc.nextLine();
            
            //3. 將鍵盤錄入的結果存儲在字符串中,並封裝成File對象
            File file = new File(line);
            
            //4. 對File對象作判斷
            if(!file.exists()){
                System.out.println("該文件夾不存在,請從新輸入");
            }else if(file.isFile()){
                System.out.println("您輸入的是文件路徑,請輸入文件夾路徑");
            }else{
                //5. 將文件夾路徑對象返回
                return file;
            }
        }
    }
}

23-05:斐波那契數列的兩種算法

  1. 數組java

    package com.test.demo001;
    
    public class Demo014 {
        public static void main(String[] args) {
            //數組形式
            int[] arr = new int[8];
            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]);
        }
    }
  2. 遞歸算法

    package com.test.demo001;
    
    public class Demo014 {
        public static void main(String[] args) {
            System.out.println(get(8));
        }
        
        public static int get(int num){
            if(num == 1 || num == 2){
                return 1;
            }else{
                return get(num - 2) + get(num -1);
            }
        }
    }

23-06:1000的階乘全部零和尾部零的個數

  1. 如下方式求階乘超表數範圍數組

    package com.test.demo001;
    
    public class Demo014 {
        public static void main(String[] args) {
            int result = 1;
            for(int i = 1;i <= 1000;i++){
                result = result * i; 
            }
            System.out.println(result);//超出int類型的表數範圍了
        }
    }
  2. 求1000階乘結果中有多少個零spa

    package com.test.demo001;
    
    import java.math.BigInteger;
    
    public class Demo014 {
        public static void main(String[] args) {
            BigInteger bi1 = new BigInteger("1");
            for(int i = 1;i <= 1000;i++){
                BigInteger bi2 = new BigInteger(i + "");
                bi1 = bi1.multiply(bi2);
            }
            System.out.println(bi1);
            int count = 0;
            String str = bi1.toString();
            for(int i = 0;i < str.length();i++){            
                if('0' == str.charAt(i)){
                    count++;
                }    
            }
            System.out.println(count);
        }
    }
  3. 求1000階乘結果尾部有多少個零指針

    package com.test.demo001;
    
    import java.math.BigInteger;
    
    public class Demo014 {
        public static void main(String[] args) {
            BigInteger bi1 = new BigInteger("1");
            for(int i = 1;i <= 1000;i++){
                BigInteger bi2 = new BigInteger(i + "");
                bi1 = bi1.multiply(bi2);
            }
            System.out.println(bi1);
            int count = 0;
            String str = bi1.toString();
            for(int i = str.length()-1; i >= 0; i--){
                if('0'==str.charAt(i)){
                    count++;
                } else {
                    break;
                }
            }
            System.out.println(count);
            
            
        }
    }

23-07:使用遞歸求1000階乘尾部零的個數

  1. 逢5的倍數至少得一個零
  2. 逢5*5的倍數至少得兩個零
  3. 5*5*5的倍數至少是三個零
  4. 5*5*5*5的倍數至少是四個零
  5. 具體見視頻【23-07】

23-08:約瑟夫環

  1. i--那要注意
  2. count用來作爲計數其
  3. i用來做爲索引(指針)
package com.test.demo001;

import java.util.ArrayList;

public class Demo014 {
    public static void main(String[] args) {
        
    }
    public static int getLucklyNum(int num){
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 1;i <= num;i++){
            list.add(i);
        }
        int count = 1;
        for(int i = 0; list.size()!= 1; i++) {
            if(i == list.size()){
                i = 0;
            }
            
            if(count % 3 ==0){
                list.remove(i--);  //這個i--要注意!
            }
            
            count++;
        }
        return list.get(0);
    }
}
相關文章
相關標籤/搜索