मैं एक फ़ोल्डर में सभी फाइलों और उनकी उप-फाइलों को खोजने के लिए रिकर्सन का उपयोग करने की कोशिश कर रहा हूं। लेकिन मैं आउटपुट को और अधिक सुंदर बनाने के लिए इंडेंटेशन जोड़ना चाहता हूं। मैंने कितने इंडेंट की आवश्यकता है यह इंगित करने के लिए फ़ंक्शन के चर के लिए एक int चर जोड़ा। यह सफलता के लिए अंतिम कोड है।
public void seekFile(File file, int tab) {
File [] files=file.listFiles();
assert files != null;
for (File file1 : files) {
if (file1.isFile()){
for(int i = 0; i< tab; i++)
System.out.print("|\t");
System.out.println(file1.getName());
}else {
for(int i = 0; i< tab; i++)
System.out.print("|\t");
System.out.println(file1.getName());
int index = tab+1;
seekFile(file1,index);
}
}
}
सबसे पहले, मैंने रिकर्सन करने के लिए seekFile(file1, ++tab)
का उपयोग किया, लेकिन मुझे जो इंडेंटेशन मिला वह सब गलत था, और tab
को स्वैप करने के बाद आउटपुट सटीक था। ऐसा क्यों है?
1 उत्तर
++tab
दो काम करता है:
- "
tab
' के मान से "1 अधिक" के मान का मूल्यांकन करता है tab
के मान को उपरोक्त मान में बदल देता है
(यह वास्तव में और भी बहुत कुछ करता है, लेकिन प्रश्न में कोड को समझने के उद्देश्य से, बस वे दोनों ही काफी हैं )
tab + 1
एक काम करता है:
- "
tab
' के मान से "1 अधिक" के मान का मूल्यांकन करता है
tab + 1
, tab
के मान को नहीं बदलता है।
यह महत्वपूर्ण है, क्योंकि आप नहीं चाहते कि tab
प्रत्येक पुनरावर्ती कॉल में बदल जाए। for (File file1 : files)
लूप के प्रत्येक पुनरावृत्ति को उसी tab
का उपयोग करना चाहिए, क्योंकि प्रत्येक पुनरावृत्ति एक फ़ाइल/निर्देशिका उसी निर्देशिका में को प्रिंट करता है। जब आप seekFile
पर कॉल करते हैं, तभी आप एक उच्च tab
नंबर का उपयोग करेंगे।
यदि आप ++tab
का उपयोग करते हैं, और आप एक निर्देशिका का सामना करते हैं, तो tab
को बढ़ा दिया जाएगा, और उसके बाद प्रत्येक भाई फ़ाइल/निर्देशिका में उससे अधिक इंडेंटेशन होगा, जितना होना चाहिए।
यदि आप tab + 1
का उपयोग करते हैं, तो वर्तमान कॉल का tab
नहीं बदलता है।
दोनों ही मामलों में, "tab
' के मान से "1 अधिक" का मान seekFile
के अगले पुनरावर्ती कॉल को पास कर दिया जाता है, और एक नया स्टैक फ़्रेम बनाया जाता है और कॉल स्टैक पर धकेल दिया जाता है। प्रत्येक स्टैक फ़्रेम का अपना tab
चर होता है, इसलिए tab + 1
को नई कॉल में पास करने से वर्तमान कॉल में tab
चर प्रभावित नहीं होता है।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।