小羊也疯狂 2016-12-02 11:00 采纳率: 100%
浏览 1466
已采纳

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条回答 默认 最新

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面