qflyalltime
小羊也疯狂
采纳率88.4%
2016-12-02 11:00 阅读 1.3k
已采纳

java 局部变量与全局变量问题

图片说明
整个代码求的是一个文件夹的大小 (文件夹里可能还有文件夹) 用的递归

问题1:原代码是书上例子 结果正确
红色标出的是我自己重写遇到的 结果是很大的负数
按我的理解 size 在方法里面是局部变量 作用整个方法
在外面是类变量 作用整个类
但是在这段代码中应该没什么不同吧,因为我只有一个方法,SIZE意思是固定的
问题2:
第14行的 files != null && 能不能省掉?

代码如下:
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;
}
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    Siiiirius 天狼sirius 2016-12-02 15:21
    1.首先,size这里的含义是每个目录的大小,这个getSize()方法返回的就是每个目录的大小,显然是每个目录一个变量是正确的,使用全局的变量
    

    实际上加了好多遍。自己想想,应该不难想明白。
    2.不能省略null的判断,省略了以后,如果是空目录就会抛出空指针异常。

    点赞 评论 复制链接分享
  • qq_29594393 当作看不见 2016-12-02 11:33

    第一个要是用全局变量,由于你要使用到递归,假设不适用全局变量的话,在每一个递归的函数中都有一个size,每个值都是不同的所以必须使用全局的变量
    第二个问题。省略也应该没问题

    点赞 评论 复制链接分享
  • syslijian 永九心 2016-12-02 11:44

    哥们,你这代码,编译都过不了吧,方法可以定义static变量吗?

    点赞 评论 复制链接分享

相关推荐