| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
绝地游戏外挂辅助教学千里之行 始于足下
共有 893 人关注过本帖
标题:递归请教,写一半了,不会做返回值
只看楼主 收藏
ppppooiiuu
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2016-3-2
结帖率:50%
  问题点数:0  回复次数:10   
递归请教,写一半了,不会做返回值
static void 递归方法(string 文件夹路径)
{
    string[] 子文件夹路径 = Directory.GetDirectories(文件夹路径);
    string[] 子文件路径 = Directory.GetFiles(文件夹路径);
    if (子文件路径 != null)
    {
        foreach (string item in 子文件路径)
        {
            Console.WriteLine(item);
        }
    }
    if (子文件夹路径 != null)
    {
        foreach (string item in 子文件夹路径)
        {
            递归方法(item);
        }
    }
}

以上是我的递归方法,可是我只会输出到控制台,而不知道要如何做成返回一个数组,请帮忙修改一下,或告知一下,谢谢
2017-06-30 20:41
leisiege
Rank: 4
等 级:业余侠客
威 望:8
帖 子:95
专家分:235
注 册:2015-10-22
  得分:0 
回复 楼主 ppppooiiuu
你这是个void函数。输出其实就是你的console。writeline。
然后。。。。把这个writeline改成数组添加元素就可以了啊。然后函数返回也是数组。
2017-06-30 20:56
leisiege
Rank: 4
等 级:业余侠客
威 望:8
帖 子:95
专家分:235
注 册:2015-10-22
  得分:0 
回复 楼主 ppppooiiuu
你这是个void函数。输出其实就是你的console。writeline。
然后。。。。把这个writeline改成数组添加元素就可以了啊。然后函数返回也是数组。
2017-06-30 20:56
ppppooiiuu
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2016-3-2
  得分:0 
回复 3楼 leisiege
我测了很多次,改为数组或集合,因为在里面每次都要new所以不能保留之前的值,最后只能用字段来存储他,如果不用字段,可以吗?
2017-06-30 21:29
leisiege
Rank: 4
等 级:业余侠客
威 望:8
帖 子:95
专家分:235
注 册:2015-10-22
  得分:0 
不用字段保存?为什么要这么想。。。。你不就是要返回一个列表吗?列表就是个变量啊。用变量不久行了啊
程序代码:

static list<string> 递归方法(string 文件夹路径)
{
&nbsp;&nbsp;&nbsp; string[] 子文件夹路径 = Directory.GetDirectories(文件夹路径);
&nbsp;&nbsp;&nbsp; string[] 子文件路径 = Directory.GetFiles(文件夹路径);
    List<string> list = new List<string>();
&nbsp;&nbsp;&nbsp; if (子文件路径 != null)
&nbsp;&nbsp;&nbsp; {
        list.AddRange(子文件路径);
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; if (子文件夹路径 != null)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (string item in 子文件夹路径)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.AddRange(递归方法(item));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp; }
    return list;
}
2017-06-30 22:02
ppppooiiuu
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2016-3-2
  得分:0 
回复 5楼 leisiege
如果我用局部变量,那么每次list<string>都会被重新new,这样就取不到完整的,如果我用字段,我每次调用他,我都必须把list<string>重新初一下,否则数据会叠加上去。不然我就得把这些封装到一个类,这样才能方便调用
2017-06-30 23:15
ppppooiiuu
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2016-3-2
  得分:0 
回复 5楼 leisiege
如果我用局部变量,那么每次list<string>都会被重新new,这样就取不到完整的,如果我用字段,我每次调用他,我都必须把list<string>重新初一下,否则数据会叠加上去。不然我就得把这些封装到一个类,这样才能方便调用
2017-06-30 23:15
leisiege
Rank: 4
等 级:业余侠客
威 望:8
帖 子:95
专家分:235
注 册:2015-10-22
  得分:0 
不会啊。。。。每次都是新对象啊。每次返回的都会被第一个list加进去啊。
另外。你这个重新new是什么意思。你是不是吧他放循环里面了。
你看我写的代码。是不是这个方法就一个new。什么重新new是什么意思。递归里面的list和外面不要搞一起。脑子不要乱。


另外啊。说话要专业店。不是重新初一下。C#是面向对象。new是构造一个对象。。只能说构造一个list对象。什么叫初一下。
=号是吧后面的对象用前面的变量引用。。。。不是初一下。


用类字段也可以啊。类对象初始化的时候赋值一个空的list《string》给他。 每次add就行了啊。调用这个方法之前。记得初始化。否则每次都会递增。

[此贴子已经被作者于2017-6-30 23:26编辑过]

2017-06-30 23:20
ppppooiiuu
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2016-3-2
  得分:0 
回复 8楼 leisiege
是啊,就是这样子,我在想我能不能不封装为一个类,就直接在一个方法中,也不使用静态字段,是否能直接实现
2017-06-30 23:36
ppppooiiuu
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2016-3-2
  得分:0 
回复 8楼 leisiege
谢谢你啦,好像可以了,我试下

[此贴子已经被作者于2017-6-30 23:40编辑过]

2017-06-30 23:39







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080473 second(s), 8 queries.
Copyright©2004-2017, BCCN.NET, All Rights Reserved