+1 امتیاز
قبل در برنامه نویسی توسط (19 امتیاز)
برچسب گذاری دوباره قبل توسط

سلام. لطف کنید به کد زیر توجه کنید:

import java.io.File;

public class Main {

	public static void main(String[] args) {

		String dir = "E:" + File.separator + "Test" + File.separator + "Files" + File.separator
				+ "non-empty";

		// delete folder recursively
		recursiveDelete(new File(dir));
	}

	public static void recursiveDelete(File file) {
		if (!file.exists()) {
			return;
		}

		// if directory, go inside and call recursively
		if (file.isDirectory()) {
			for (File f : file.listFiles()) {
				// call recursively
				recursiveDelete(f);
				System.out.println("recursively");
			}
		}
		file.delete();
		System.out.println("Deleted file/folder: " + file.getAbsolutePath());

	}

}

شرط if چک می‌کند که آیا فایل مورد بررسی دایرکتوری است یا خیر. اگر نباشد از بلاک if خارج شده و کد‌های زیر اجرا می‌شود:

		file.delete();
		System.out.println("Deleted file/folder: " + file.getAbsolutePath());

اما بعد از اجرای کد‌های فوق، برنامه دوباره وارد حلقه‌ی for داخل بدنه‌ی if می‌شود. بنده متوجه این موضوع نمی‌شوم. چرا وقتی که از بدنه if و حلقه for خارج شده، دوباره وارد می‌شود؟

1 پاسخ

0 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

توابع بازگشتی چون خودشون خودشون رو فراخوانی می کنند هر فراخوانی در استک قرار می گیرد و سپس کل استک شروع به pop شدن می کند. وقتی متد recursiveDelete بصورت بازگشتی فراخوانی می شود این فراخوانی ها انقدر جلو می رود که فایل ها دلیرکتوری نباشند و سپس دونه دونه از استک pop می شوند و خط بعد از if برای تمام فایل های که دایرکتوری نیستند اجرا میشود.

سوالات مشابه

0 امتیاز
0 پاسخ 414 بازدید
0 امتیاز
1 پاسخ 539 بازدید
0 امتیاز
1 پاسخ 289 بازدید
0 امتیاز
1 پاسخ 261 بازدید
+1 امتیاز
0 پاسخ 161 بازدید
+2 امتیاز
1 پاسخ 793 بازدید
+1 امتیاز
1 پاسخ 509 بازدید
سوال شده 4 سال قبل در برنامه نویسی توسط Reza.R (851 امتیاز)
...