Java遞迴與基礎複習
阿新 • • 發佈:2021-10-16
Day01—基礎複習,遞迴
1、遞迴
-
定義:指在當前方法內呼叫自己,即函式內部呼叫本函式
-
分類:
- 直接遞迴和間接遞迴
- 直接遞迴成為方法自身呼叫自己
- 間接遞迴可以A方法呼叫B方法,B方法呼叫C方法,C方法呼叫A方法
-
注意事項
- 遞迴一定要有條件限定,保證遞迴能夠停止下來,否則會發生棧記憶體溢位
- 在遞迴中雖然有條件限定,但遞迴次數不能太多,否則也會發生棧記憶體溢位。
- 構造方法,禁止遞迴。
-
遞迴使用的前提
- 當呼叫方法的時候,方法的主體不變,每次呼叫方法的引數不同,可以使用遞迴
-
遞迴練習
-
1、計算1到n的和
package com.one; public class Sum_n { public static void main(String[] args) { // 使用遞迴計算1到100的和 int s= sum(100); System.out.println(s); } /* * 思路分析: * 計算1-N的和 * 可以做 n+(n-1)+(n-2)+...+1 * 注:使用遞迴必須明確: * 1、遞迴的結束條件 * 本題獲取到1結束 * 2、遞迴的目的 * 獲取下一個被加的數字 * */ public static int sum(int n){ //獲取到1結果 if(n==1){ return 1; } //獲取下一個被加的數字(n-1) return n+sum(n-1); } }
-
使用遞迴求階乘
package com.one; public class Jiecheng { public static void main(String[] args) { //遞迴n*(n-1)*(n-2)*..*1 int jiecheng=jc(5); System.out.print(jiecheng); } //方法的主體不變,引數發生變化 public static int jc(int n){ //獲取到1結果 if(n==1){ return 1; } //獲取下一個被加的數字(n-1) return n*jc(n-1); } }
- 使用遞迴遍歷檔案目錄
package com.one; import java.io.File; public class Dfile { /*要求列印多級目錄*/ public static void main(String[] args){ File file=new File("E:\\note"); getAllFile(file); } public static void getAllFile(File dir){ System.out.println(dir); File[] files=dir.listFiles(); for (File f:files){ if(f.isDirectory()){ //判斷是否是資料夾,如果是資料夾,則執行本身繼續遞迴遍歷 getAllFile(f); }else{ //不是資料夾,則直接列印 System.out.println(f); } } } } /*Console結果 * E:\note E:\note\Ajax.md E:\note\api1.md E:\note\API2.md * */
- 搜尋限定檔案型別
package com.one;
import java.io.File;
public class Dfile {
/*1、要求列印多級目錄
* 2、要求只打印.md檔案*/
public static void main(String[] args){
File file=new File("E:\\note");
getAllFile(file);
}
public static void getAllFile(File dir){
File[] files=dir.listFiles();
for (File f:files){
if(f.isDirectory()){
//判斷是否是資料夾,如果是資料夾,則執行本身繼續遞迴遍歷
getAllFile(f);
}else{
//不是資料夾,則直接列印
//使用File物件的toSting方法,在使用字串的endWith("字串")判斷結尾字元,返回布林值的方法;
String s= f.toString();
//把字串全部轉換為小寫的
s=s.toLowerCase();
boolean bool=s.endsWith(".md");
if(bool){
System.out.println(f);
}
//簡潔寫法
//鏈式程式設計
if(f.getName().toString().endsWith(".md")){
System.out.println(f);
}
}
}
}
}
/*Console結果
E:\note\Ajax.md
E:\note\api1.md
E:\note\API2.md
* */
2、基礎知識複習
2.1 命令
//檢視版本
javac -version
java -version
// 編譯與執行
javac Xxxx.java
生成Xxxx.class
執行命令
java Xxxx
2.2常量
定義:在程式執行中,空間不能發生改變,變數不能被第二次賦值的空間叫做常量;只有一次賦值機會。
規範:所有字母大寫
關鍵字:final
package com.two;
public class demo1 {
public static void main(String[] args) {
//聲名常量
final double PI =3.1415926;
System.out.print(PI);
}
}
2.3資料型別
- 參考連線:
https://www.runoob.com/java/java-basic-datatypes.html
此處不在一一複習只做簡單介紹:
計算機儲存單位
1位=8位元組
1bit=8byte
分類:
整型 int,long型別
浮點型 double float(注:float聲名的數字需要在數字後新增f)
布林型 boolean bool;
字元型 char a='k';佔兩個位元組;只能使用單引號聲名;
short 預設值 0
2.4資料型別轉換
布林型(boolean)不參與型別轉換
-
自動
可以自然而然發生,不需要人為干預。一般發生在從小轉向大。將小資料賦值給大型別的變數。從小型別轉成大型別。資料是不會發生丟失
賦值:小的資料 給到大的型別的變數; 小的型別的資料給到大的型別的變數
運算:運算過程中,選取大型別(將所有運算數的型別自動轉為同一種類型,然後運算)
必須滿足轉換前的資料型別的位數要低於轉換後的資料型別,例如: short資料型別的位數為16位,就可以自動轉換位數為32的int型別,同樣float資料型別的位數為32,可以自動轉換為64位的double型別。
package com.two; public class demo1 { public static void main(String[] args) { char c1='a';//定義一個char型別 int i1 = c1;//char自動型別轉換為int System.out.println("char自動型別轉換為int後的值等於"+i1); char c2 = 'A';//定義一個char型別 int i2 = c2+1;//char 型別和 int 型別計算 System.out.println("char型別和int計算後的值等於"+i2); } } /*c1 的值為字元 a ,查 ASCII 碼錶可知對應的 int 型別值為 97, A 對應值為 65,所以 i2=65+1=66。*/
-
強制型別轉換
- 條件是轉換的資料型別必須是相容的。
- 格式:(type)value type是要強制型別轉換後的資料型別 例項:
package com.two; public class Demo2 { public static void main(String[] args) { // 強制型別轉換 int i1 = 123; byte b = (byte)i1;//強制型別轉換為byte System.out.println("int強制型別轉換為byte後的值等於"+b); double d= (double)i1; System.out.println("int強制型別轉換為double後的值等於"+d); } } /*int強制型別轉換為byte後的值等於123*/
-
隱含強制型別轉換
- 整數的預設型別是 int。
- 小數預設是 double 型別浮點型,在定義 float 型別時必須在數字後面跟上 F 或者 f。
不辜負自己,加油;