C# 如何在C中调试System.ArgumentOutOfRangeException错误?
这个代码应该取两个样本,一个是原始的,一个是新的,然后确定插入到第一个序列中的最小的一个连续片段的长度 尝试某些示例时,我收到以下错误消息: System.ArgumentOutOfRangeException:'索引和长度必须引用 放在绳子里。参数名称:长度 代码如下:C# 如何在C中调试System.ArgumentOutOfRangeException错误?,c#,error-handling,outofrangeexception,C#,Error Handling,Outofrangeexception,这个代码应该取两个样本,一个是原始的,一个是新的,然后确定插入到第一个序列中的最小的一个连续片段的长度 尝试某些示例时,我收到以下错误消息: System.ArgumentOutOfRangeException:'索引和长度必须引用 放在绳子里。参数名称:长度 代码如下: class Program { static void Main(string[] args) { Console.WriteLine(GetSample()); Consol
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetSample());
Console.ReadKey();
}
public static int GetSample()
{
string sample1 = Console.ReadLine();
string sample2 = Console.ReadLine();
if (sample1 == sample2) return 0;
if (sample1.Length >= sample2.Length)
{
for (int i = 0; i < sample2.Length; i++)
{
if (!(sample1[i] == sample2[i]))
{
sample1 = sample1.Substring(i, sample1.Length);
sample2 = sample2.Substring(i, sample2.Length);
break;
}
}
int var = sample1.Length - sample2.Length;
for (int i = sample2.Length - 1; i >= 0; i--)
{
if (sample2[i] == sample1[i + var])
sample2 = trimlast(sample2);
}
}
else
{
for (int i = 0; i < sample1.Length; i++)
{
if (!(sample1[i] == sample2[i]))
{
sample1 = sample1.Substring(i, sample1.Length);
sample2 = sample2.Substring(i, sample2.Length);
break;
}
}
int var = sample2.Length - sample1.Length;
for (int i = sample1.Length - 1; i >= 0; i--)
{
if (sample2[i + var] == sample1[i])
sample2 = trimlast(sample2);
}
}
return sample2.Length;
}
public static string trimlast(string str)
{
return str.Substring(0, str.Length - 1);
}
}
}
问题是:
sample1 = sample1.Substring(i, sample1.Length);
以及其他类似的方法调用。子字符串的第二个参数是长度,即为子字符串检索的字符数。因此,如果i大于0,则在这种情况下应该失败,因为该方法将尝试检索字符串中不存在的字符。您的一个循环正在尝试访问不存在的元素。例如,如果您有一个数组a={1,2,3},那么您正试图访问第四个元素,该元素不存在
如果您无法找到确切的位置,则可能存在问题,请尝试在循环中使用print语句,显示计数器i值。它将指出您的代码在哪个迭代中失败。您不明白的错误消息是什么?这听起来不言自明。梅森当然明白,我想我肯定错过了一件很明显的事情:你仍然没有回答我的问题。你不明白错误信息的哪一部分?是的,它确实指出了它失败的地方,这是我从一个朋友那里得到的代码,我只是想弄清楚如何开始工作。我想我可以在这里找些指针!有些人给了我指点,所以我会调查的!可以我会调查的,谢谢。抱歉,如果这是一个愚蠢的问题,试图帮助朋友,同时学习:@SeanleArch这根本不是一个愚蠢的问题-各种语言对此极不一致。事实上,在Java中,第二个参数是排他的结束索引,因此您的问题中的代码将与Java中编写的代码完全相同。