以空格开始新行
本文关键字:新行 开始 空格 | 更新日期: 2023-09-27 18:24:27
我陷入了这个问题,如果有人能帮我解决这个问题,我将不胜感激。
- 我想为下面这样的格式的子文件夹添加空间。(必须使用递归)
-
我想为下面这样的格式的子文件夹添加空间。(它必须使用递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace G14_211115 { class Program { static void Main(string[] args) { string path = @"C:'Program Files'FinchVPN"; WriteDirectories(path); Console.ReadKey(); } /* Tasks. * 1. I want to add spaces for subfolder like this format down below. ( it must be done with recursion) * Like this * -------------------------------------------------------------- * Folder 1 * Folder 1.1 * Folder 1.2 * Folder 2 * Folder 2.1 * Folder 2.1.1 * Folder 2.2 * Folder 3 * Folder 4 * * 2. Task 2 I want to retype this code without using recurrence and C# inbuilt functions. */ static void WriteDirectories(string path) { string[] dirs = Directory.GetDirectories(path); for(int i = 0; i < dirs.Length; i++) { Console.WriteLine(dirs[i]); WriteDirectories(dirs[i]); } } } }
在递归调用WriteDirectories
时,可以向每个调用传递一个变量,指示(recursion)level
。使用它,您可以在输出之前放置一些空格。
因此,您需要这样修改您的代码:
static void WriteDirectories(string path, int level = 0)
{
string[] dirs = Directory.GetDirectories(path);
for (int i = 0; i < dirs.Length; i++)
{
for (int j = 0; j < level; j++)
{
Console.Write(" ");
}
Console.WriteLine(dirs[i]);
WriteDirectories(dirs[i], (level + 1));
}
}
如果每个级别只需要一个以上的空格,您可以简单地修改内部循环,j < 2 * level
将为每个级别提供2个空格字符,依此类推
更新(感谢David)
您可以使用new string(' ', level)
来创建一个包含指定字符level
-times的新字符串,而不是使用内部循环。
因此,内部的for
-环路将被Console.Write(new string(' ', level));
所取代。
只需为递归调用提供一个深度参数,并根据深度添加空格。
static void WriteDirectories(string path, int depth) {
string[] dirs = Directory.GetDirectories(path);
for(int i = 0; i < dirs.Length; i++) {
string preSpaces = new String(' ',depth);
Console.WriteLine(preSpaces + dirs[i]);
WriteDirectories(dirs[i], depth+1);
}
}
您的第一个调用应提供0或1作为深度。