当我调试这个控制台应用程序时,它会给出一个奇怪的结果。显然我忽视了一些事情。
class Program
{
static void Main(string[] args)
{
int ops = int.Parse(Console.ReadLine());
int inte = 0;
StringBuilder roll = new StringBuilder();
Operations(roll, inte, ops);
}
static void Operations(StringBuilder roll, int inte, int ops)
{
for (int i = 0; i < ops; i++)
{
roll.AppendLine(Console.ReadLine());
inte = roll.ToString().IndexOf("^");
if (inte == i)
roll.Remove(i, 1);
if (roll.ToString().IndexOf("!") == i)
roll.Remove(i, 1);
}
Console.WriteLine(roll.ToString());
Console.ReadLine();
}
}
对于输入,为第一个输入键入“3”(整数“inte”),为其他3个ReadLine条目键入“^ A”,“^ B”“^ D”。在循环的第一次迭代中,它将按预期删除^。但是在第二次迭代(i = 1)时,它将inte读为3.但它应该是1,因为在第二轮中,Stringbuilder已将“^ B”附加到A,因此它现在是“A ^ B”。我正在尝试删除“^”(以及“!”s),因为stringbuilder正在附加字符串。为什么第二轮“inte”整数读数为3?
答案 0 :(得分:8)
这是你的问题:
roll.AppendLine(Console.ReadLine());
您正在使用AppendLine
,因此在第一次迭代时,它会附加“^ A”,然后是回车符('\r'
)和换行符('\n'
)。删除第一个字符后,字符串中仍然有3个字符。 ('A'
,'\r'
和'\n'
)。这就是为什么在索引3而不是索引1附加^B\r\n" in the second iteration, you find the
^`之后。
只需将其更改为:
roll.Append(Console.ReadLine());
我怀疑你会得到你期待的结果。