[英]Void to String method conversion with nested methods
public void Print() {
Print(root, 4);
}
private void Print(Node node, int padding) {
if (node != null) {
if (node.rChild != null) {
Print(node.rChild, padding + 4);
}
if (padding > 0) {
Console.Write(" ".PadLeft(padding));
}
if (node.rChild != null) {
Console.Write("/\n");
Console.Write(" ".PadLeft(padding));
}
Console.Write(node.value.ToString() + "\n ");
if (node.lChild != null) {
Console.Write(" ".PadLeft(padding) + "\\\n");
Print(node.lChild, padding + 4);
}
}
}
此代碼在控制台中返回一個很好的格式日志。 如下
6
/
5
\
4
/
3
\
2
\
2
現在,當我將void轉換為字符串格式時,它變得凌亂,似乎無法正常工作。 因為我有嵌套方法。
所以我目前在從void到string的轉換中迷失了
因此,不希望打印出值,而是希望它將樹作為字符串返回。
好吧,要做到這一點,你只需要改變每個Console.Write
方法調用,將你正在打印的字符串追加到一個大字符串,並且每個Print
方法調用將Print
的返回值附加到一個大字符串。 並在最后返回這個大字符串
基本上,想象一下“大字符串”就是控制台。
你可以使用StringBuilder
類作為我正在談論的這個大字符串。 讓我們在print方法的開頭創建一個:
StringBuilder sb = new StringBuilder ();
現在我們需要尋找這兩種模式並進行更改。
我們改變:
Console.Write(XXX);
至
sb.Append(XXX);
並改變
Print(XXX, XXX);
至
sb.Append(Print(XXX, XXX))
現在該方法如下所示:
private string Print(Node node, int padding) {
StringBuilder sb = new StringBuilder ();
if (node != null) {
if (node.rChild != null) {
sb.Append(Print(node.rChild, padding + 4));
}
if (padding > 0) {
sb.Append(" ".PadLeft(padding));
}
if (node.rChild != null) {
sb.Append("/\n");
sb.Append(" ".PadLeft(padding));
}
sb.Append(node.value.ToString() + "\n ");
if (node.lChild != null) {
sb.Append(" ".PadLeft(padding) + "\\\n");
sb.Append(Print(node.lChild, padding + 4));
}
}
return sb.ToString ();
}
在此之后,您應該能夠更改無參數的Print
方法以自行返回字符串。
解決這個問題的簡明方法是:
if
語句,該語句可以生成if
語句中的內容或空字符串。 +
所有部分組合在一起 這會給你這個:
private string Print(Node node, int padding)
{
if (node != null)
{
return
(node.rChild != null
? Print(node.rChild, padding + 4)
: "") +
(padding > 0
? " ".PadLeft(padding)
: "") +
(node.rChild != null
? "/\n" + " ".PadLeft(padding)
: "") +
node.value.ToString() + "\n " +
(node.lChild != null
? " ".PadLeft(padding) + "\\\n" + Print(node.lChild, padding + 4)
: "");
}
return "";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.