程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> java-Java局部變量全局變量遞歸問題

java-Java局部變量全局變量遞歸問題

編輯:編程解疑
Java局部變量全局變量遞歸問題

圖片說明

先說明一下 代碼求的是一個文件夾的大小

****寫法1:用全局變量 不對 寫法2 :用局部變量 對****
為什麼?最好能解釋的詳細一點

 import java.io.File;
import java.util.Scanner;
public class Directory{
public static void main(String []args){
System.out.println("Enter a directory of file ") ;
Scanner input = new Scanner (System.in);
String directory = input.nextLine();
System.out.println(getSize(new File(directory)) + "bytes");
}
public static long getSize(File file ){
long size = 0;
if (file.isDirectory()){
File[]files = file.listFiles();
for (int i =0;files != null && i<files.length; i++)
size+=getSize(files[i]);
}
else 
size +=file.length(); 
return size;
}
}

最佳回答:


如果你使用成員變量,那麼你就不要返回值,因為每次都將獲得的文件大小累加到成員變量size上了。但很顯然你使用成員變量的同時又返回了值。
比方說:
第一次查找到一個文件,大小是 100 byte,size 此時 = 100;
第二次查找到一個文件,大小是 200 byte , size 此時 = 300;
然後查找到一個文件夾,此時遞歸。
緊接著找的一個文件,文件的大小是 50 byte, size 此時 = 350;
這個文件夾沒有文件了,退出,注意!!! 重點來了,return 一個 size
而你用size += getSize() 去接收返回值,此時的成員變量會是多少呢? 350 + 350 = 700,莫名其妙的翻了一倍有木有!!!!

這樣子的話,如果你這個文件夾裡的有很多層級,那就一直一倍一倍的往上翻,最後就是個天文數字。。。。

自個好好理一下,我說的如果你能夠理解那就最好不過。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved