A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-郑玉元 高级黑马   /  2013-4-2 22:21  /  1806 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public static void main(String[] args) {
  2.                 System.out.println("请输入文件目录");
  3.                 File file = Demo02.getDir();
  4.                 printFileName(file,0);
  5.         }

  6.         private static void printFileName(File file,int n) {                  //打印文件的层次目录
  7.                
  8.                 File [] subFiles = file.listFiles();
  9.                 for(File files : subFiles){
  10.                         for(int i=0;i<n;i++)
  11.                                 System.out.print("\t");
  12.                         System.out.println(files.getName()+n);
  13.                         if(files.isDirectory())
  14.                                 printFileName(files,n+1);     // 为什么n+1与++n或者n++结果不同
  15.                 }
  16.         }
复制代码
为什么结果不一样!是哪步造成的?

8 个回复

倒序浏览
++n是先把n的值加一以后在使用
n++是先使用n再把n的值加一
此处n+1应该与++n一样
回复 使用道具 举报
是哪步造成的!!!不是要你回答这个!三个结果都不一样!
回复 使用道具 举报

RE: 递归的应用

我认为是在  System.out.println(files.getName()+n);这一步造成的
比如printFileName(files,n+1);第一次调用时是(n+1)
第二次调用时是(n+1)+1
第三次调用时是((n+1)+1)+1
...

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
              for(File files : subFiles){

                      for(int i=0;i<n;i++)//这里的n是造成问题的关键 如果这里不是变量n 则n+1和 ++n是一样的 但因为这里 所以结果不一样 而n++和前面两个根本就不一样
                                                          //所以这三种你递归的结果都不一样
                               System.out.print("\t");

                     System.out.println(files.getName()+n);

                        if(files.isDirectory())

                              printFileName(files,n+1);     // 为什么n+1与++n或者n++结果不同

               }
回复 使用道具 举报
yangyinhui 发表于 2013-4-3 10:38
我认为是在  System.out.println(files.getName()+n);这一步造成的
比如printFileName(files,n+1);第一次调 ...

System.out.println(files.getName()+n);这个+n不要也一样!
回复 使用道具 举报
黑马-郑玉元 发表于 2013-4-3 17:36
System.out.println(files.getName()+n);这个+n不要也一样!

你现在知道原因了吗?
回复 使用道具 举报
yangyinhui 发表于 2013-4-3 20:08
你现在知道原因了吗?

不知道哟!
回复 使用道具 举报
当然都不一样了,n+1不改变n的值,只是实参变了,实参变了,递归中的代码就会改变;++n是先给n赋n+1,再把n当作实参;n++是先把n当作实参再给n赋n+1
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马