原文在這里,寫(xiě)得不錯(cuò),樓主可參考下,具體鏈接如下,我只是搬運(yùn)工!
十載的青田網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷(xiāo)的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整青田建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“青田網(wǎng)站設(shè)計(jì)”,“青田網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
/**?
*?說(shuō)明方法描述:將list轉(zhuǎn)為樹(shù)tree結(jié)構(gòu)?
*??
*?@param?allRrecords?
*?@return?
*?@time?2016年5月10日?下午6:00:35?
*?@author?yangdong?
*/??
public?ListRecord?useListRecordToTree(ListRecord?allRrecords)?{??
ListRecord?listParentRecord?=?new?ArrayListRecord();??
ListRecord?listNotParentRecord?=?new?ArrayListRecord();??
//?第一步:遍歷allRrecords保存所有數(shù)據(jù)的uuid用于判斷是不是根節(jié)點(diǎn)??
MapString,?String?mapAllUuid?=?new?HashMapString,?String();??
MapString,?Record?allRecordMap?=?new?HashMapString,?Record();??
for?(Record?record?:?allRrecords)?{??
mapAllUuid.put(record.getStr("uuid"),?record.getStr("uuid"));??
allRecordMap.put(record.getStr("uuid"),?record);??
}??
//?第二步:遍歷allRrecords找出所有的根節(jié)點(diǎn)和非根節(jié)點(diǎn)??
if?(allRrecords?!=?null??allRrecords.size()??0)?{??
for?(Record?record?:?allRrecords)?{??
if?(StringUtil.isBlank(record.getStr("parent_uuid"))??
||?!mapAllUuid.containsKey(record.getStr("parent_uuid")))?{??
listParentRecord.add(record);??
}?else?{??
listNotParentRecord.add(record);??
}??
}??
}??
//?第三步:?遞歸獲取所有子節(jié)點(diǎn)??
if?(listParentRecord.size()??0)?{??
for?(Record?record?:?listParentRecord)?{??
//?添加所有子級(jí)??
record.set("childs",?this.getTreeChildRecord(listNotParentRecord,?record.getStr("uuid")));??
}??
}??
return?listParentRecord;??
}??
/**?
*?說(shuō)明方法描述:使list轉(zhuǎn)換為樹(shù)并根據(jù)關(guān)鍵字和節(jié)點(diǎn)名稱(chēng)過(guò)濾?
*??
*?@param?allRecords?所有節(jié)點(diǎn)?
*?@param?keywords?要過(guò)濾的關(guān)鍵字?
*?@param?filterFields?要過(guò)濾的字段?
*?@return?
*?@time?2016年5月19日?下午3:27:32?
*?@author?yangdong?
*/??
public?ListRecord?useListRecordToTreeByKeywords(ListRecord?allRecords,?String?keywords,?String...?filterFields)?{??
ListRecord?listRecord?=?new?ArrayListRecord();??
MapString,?Record?allRecordMap?=?new?HashMapString,?Record();??
for?(Record?record?:?allRecords)?{??
allRecordMap.put(record.getStr("uuid"),?record);??
}??
//?遍歷allRrecords找出所有的nodeName和關(guān)鍵字keywords相關(guān)的數(shù)據(jù)??
if?(allRecords?!=?null??allRecords.size()??0)?{??
if?(filterFields.length??1)?{??
for?(Record?record?:?allRecords)?{??
for?(String?field?:?filterFields)?{??
//?比較??
if?(record.getStr(field).toLowerCase().indexOf(keywords.toLowerCase())?!=?-1)?{??
listRecord.add(record);??
}??
}??
}??
}?else?{??
for?(Record?record?:?allRecords)?{??
//?比較??
if?(record.getStr(filterFields[0]).toLowerCase().indexOf(keywords.toLowerCase())?!=?-1)?{??
listRecord.add(record);??
}??
}??
}??
}??
//?查找過(guò)濾出來(lái)的節(jié)點(diǎn)和他們的父節(jié)點(diǎn)??
listRecord?=?this.getSelfAndTheirParentRecord(listRecord,?new?ArrayListRecord(),??
new?HashMapString,?Record(),?allRecordMap);??
//?將過(guò)濾出來(lái)的數(shù)據(jù)變成樹(shù)tree結(jié)構(gòu)??
listRecord?=?this.useListRecordToTree(listRecord);??
return?listRecord;??
}??
/**?
*?說(shuō)明方法描述:遞歸查詢(xún)子節(jié)點(diǎn)?
*??
*?@param?childList?子節(jié)點(diǎn)?
*?@param?parentUuid?父節(jié)點(diǎn)id?
*?@return?
*?@time?2016年5月10日?下午3:29:35?
*?@author?yangdong?
*/??
private?ListRecord?getTreeChildRecord(ListRecord?childList,?String?parentUuid)?{??
ListRecord?listParentRecord?=?new?ArrayListRecord();??
ListRecord?listNotParentRecord?=?new?ArrayListRecord();??
//?遍歷tmpList,找出所有的根節(jié)點(diǎn)和非根節(jié)點(diǎn)??
if?(childList?!=?null??childList.size()??0)?{??
for?(Record?record?:?childList)?{??
//?對(duì)比找出父節(jié)點(diǎn)??
if?(StringUtil.equals(record.getStr("parent_uuid"),?parentUuid))?{??
listParentRecord.add(record);??
}?else?{??
listNotParentRecord.add(record);??
}??
}??
}??
//?查詢(xún)子節(jié)點(diǎn)??
if?(listParentRecord.size()??0)?{??
for?(Record?record?:?listParentRecord)?{??
//?遞歸查詢(xún)子節(jié)點(diǎn)??
record.set("childs",?getTreeChildRecord(listNotParentRecord,?record.getStr("uuid")));??
}??
}??
return?listParentRecord;??
}??
/**?
*?說(shuō)明方法描述:遞歸找出本節(jié)點(diǎn)和他們的父節(jié)點(diǎn)?
*??
*?@param?parentList?根據(jù)關(guān)鍵字過(guò)濾出來(lái)的相關(guān)節(jié)點(diǎn)的父節(jié)點(diǎn)?
*?@param?resultList?返回的過(guò)濾出來(lái)的節(jié)點(diǎn)?
*?@param?filterRecordMap?已經(jīng)過(guò)濾出來(lái)的節(jié)點(diǎn)?
*?@param?allRecordMap?所有節(jié)點(diǎn)?
*?@return?
*?@time?2016年5月19日?上午9:53:56?
*?@author?yangdong?
*/??
private?ListRecord?getSelfAndTheirParentRecord(ListRecord?parentList,?ListRecord?resultList,??
MapString,?Record?filterRecordMap,??
MapString,?Record?allRecordMap)?{??
//?當(dāng)父節(jié)點(diǎn)為null或者節(jié)點(diǎn)數(shù)量為0時(shí)返回結(jié)果,退出遞歸??
if?(parentList?==?null?||?parentList.size()?==?0)?{??
return?resultList;??
}??
//?重新創(chuàng)建父節(jié)點(diǎn)集合??
ListRecord?listParentRecord?=?new?ArrayListRecord();??
//?遍歷已經(jīng)過(guò)濾出來(lái)的節(jié)點(diǎn)??
for?(Record?record?:?parentList)?{??
String?uuid?=?record.getStr("uuid");??
String?parent_uuid?=?record.getStr("parent_uuid");??
//?如果已經(jīng)過(guò)濾出來(lái)的節(jié)點(diǎn)不存在則添加到list中??
if?(!filterRecordMap.containsKey(uuid))?{??
listParentRecord.add(record);//?添加到父節(jié)點(diǎn)中??
filterRecordMap.put(uuid,?record);//?添加到已過(guò)濾的map中??
allRecordMap.remove(uuid);//?移除集合中相應(yīng)的元素??
resultList.add(record);//?添加到結(jié)果集中??
}??
//?找出本節(jié)點(diǎn)的父節(jié)點(diǎn)并添加到listParentRecord父節(jié)點(diǎn)集合中,并移除集合中相應(yīng)的元素??
if?(StringUtil.isNotBlank(parent_uuid))?{??
Record?parentRecord?=?allRecordMap.get(parent_uuid);??
if?(parentRecord?!=?null)?{??
listParentRecord.add(parentRecord);??
allRecordMap.remove(parent_uuid);??
}??
}??
}??
//?遞歸調(diào)用??
getSelfAndTheirParentRecord(listParentRecord,?resultList,?filterRecordMap,?allRecordMap);??
return?resultList;??
}??
[java]?view?plain?copy
//示例??
[java]?view?plain?copy
/**?
*?說(shuō)明方法描述:遞歸查詢(xún)所有權(quán)限?
*??
*?@param?keyword?
*?@param?is_deleted?
*?@return?
*?@time?2016年5月10日?下午3:47:50?
*?@author?yangdong?
*/??
public?ListRecord?getRecordByKeywordRecursive(String?keyword,?String?is_deleted)?{??
//?第一步:查詢(xún)所有的數(shù)據(jù)??
StringBuffer?sql?=?new?StringBuffer(??
"?select?pa.uuid,pa.parent_uuid,pa.author_code,pa.author_name,pa.is_menu,pa.sort_number,pa.is_enable,pa.menu_icon?");??
sql.append("??from?s_author?pa");??
ListObject?params?=?new?ArrayListObject();??
sql.append("?where??pa.is_deleted=??");??
params.add(is_deleted);??
sql.append("?order?by?pa.sort_number?asc?");??
ListRecord?allRrecords?=?Db.use(AppConst.DB_DATASOURCE_MAIN).find(sql.toString(),?ParamUtil.listToArray(params));??
[java]?view?plain?copy
//第二步:將list變?yōu)闃?shù)tree結(jié)構(gòu)??
if?(StringUtil.isNotBlank(keyword))?{??
return?super.useListRecordToTreeByKeywords(allRrecords,?keyword,?"author_name");??
}?else?{??
return?super.useListRecordToTree(allRrecords);??
}??
}
你的程序只打印指定目錄下的“.java”文件,是因?yàn)閐ir.listFiles(new FilenameFilter());只返回過(guò)濾后的文件列表,所以返回的是指定目錄下的“.java”文件
你的程序我?guī)湍愀暮昧?你看看吧
import?java.io.*;
class?test2
{
public?static?void?main(String[]?args)?
{
File?fi=new?File("D:\\BD\\java2016");???//指定查找目錄
showdir(fi);
}
public?static?void?showdir(File?dir)?//定義一個(gè)返回目錄中所有文件的方法showdir
{
if(dir.isDirectory())
{????????//判斷是否目錄,
File[]?files=dir.listFiles(new?FilenameFilter()???//定義過(guò)濾器,過(guò)濾文件類(lèi)型為.java的文件
{
public?boolean?accept(File?dir,String?name)
{
return?name.endsWith(".java");
}
});
for(int?x=0;xfiles.length;x++)????????//打印以.java結(jié)尾的文件名
{
System.out.println(files[x]);?
}
File[]?files1=dir.listFiles();???//定義沒(méi)有過(guò)濾器的文件列表
for(int?x=0;xfiles1.length;x++)????????
{
if(files1[x].isDirectory())???//如果是目錄則遞歸調(diào)用showdir方法,不是目錄則忽略
showdir(files1[x]);??
}
}
}?
}
一般遞歸只實(shí)現(xiàn)一個(gè)方向的邏輯,把兩個(gè)方向的邏輯放到一方法里并不好,不容易控制,實(shí)現(xiàn)也很麻煩,考慮到維護(hù)時(shí)的難度請(qǐng)不要在實(shí)際項(xiàng)目中使用。
搞了好一會(huì),搞出個(gè)這樣的輸出2N-1行星號(hào),中間最長(zhǎng)的一行不重復(fù),如果樓主希望重復(fù)中間一行,可以對(duì)代碼做一點(diǎn)點(diǎn)改動(dòng)。
/**
* 入口,傳入N
*/
public static void printStar(int number){
printStar2(number, number, 1);
}
/**
*
* @param number 給定的N
* @param oldNumber 給定的N
* @param direction 遞歸時(shí)的方向
*/
public static void printStar2(int number,int oldNumber, int direction){
if(number==0)direction++;
String s="";
int i = number;
if(direction==1){
for(;ioldNumber;i++){
s+="*";
}
number--;
}else{
for(;ioldNumber;i++){
s+="*";
}
number++;
if(numberoldNumber){
return;
}
}
printStar2(number,oldNumber,direction);
System.out.println(s);
}
-----------------------------------------------------------------------------------------
運(yùn)行效果:
printStar(5);
*
**
***
****
*****
****
***
**
*
public static void main(String[] args) throws Exception {
System.out.print("請(qǐng)輸入檢索的盤(pán)符:");
Scanner input = new Scanner(System.in);
String pf = input.next();
System.out.print("請(qǐng)輸入檢索的字符串:");
String s = input.next();
File file = new File(pf + ":/");
if (!file.isDirectory()) {
System.out.println("盤(pán)符不存在,或沒(méi)有內(nèi)容!");
return;
}
js(file, s);
}
public static void js(File file, String s) throws Exception {
if (file == null)
return;
if (file.isFile()) {// 判斷是否是文件
String name = file.getName();// 取得文件的名字
// 文件的名字沒(méi)有去掉后綴,這段代碼你自己寫(xiě)吧。
name = name == null ? "" : name.trim();
String path = file.getPath();// 取得文件路徑
if (name.equalsIgnoreCase(s))// 如果文件名于錄入的字符串相等打印文件路徑
System.out.println(path);
}
File[] files = file.listFiles();// 取得文件夾中包含的文件及文件夾
if (files == null || files.length = 0)
return;// 如果沒(méi)有其中沒(méi)有文件或文件夾,返回
for (File file2 : files) {// 循環(huán)其下所有文件及文件夾
js(file2, s);// 遞歸
}
}
大體上是這樣的。
下面遞歸寫(xiě)了一段遞歸累加到100,每加20個(gè)就換行輸出。
package?zhidao;
public?class?Digui?{
public?static?int?add(int?num){
int?sum?=?0;
StringBuffer?sb?=?new?StringBuffer();
if?(num?=?0)?{
return?0;
}else{
if?(num?==?1)?{
sum?=?sum+1;
}else?{
sum?=?add(num-1)+num;
}
if?(num?%?20?==?0)?{
System.out.println("[index?=?"+num+"?sum?=?"+sum+"]");
}else?{
System.out.print("[index?=?"+num+"?sum?=?"+sum+"],");
}
}
return?sum;
}
public?static?void?main(String[]?args)?{
add(100);
}
}
這個(gè)就是個(gè)樹(shù)形結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)里的東西。查詢(xún)后構(gòu)建一個(gè)樹(shù)就行了。稍后給你一個(gè)代碼。