这是我试图解决的更大问题的一部分,但索引超出范围异常对我来说似乎是一个无形的障碍。 这个if循环在c ++中运行良好,但在c#中,idk发生了什么。任何帮助表示赞赏。这对我来说非常重要。请找到此例外的根目录。
namespace damn
{
class Program
{
static void Main(string[] args)
{
string InputString = Console.ReadLine();
string[] stringArray = InputString.Split(',');
int[] intArray = new int[stringArray.Length];
for (int i = 0; i < stringArray.Length; i++)
{
intArray[i] = int.Parse(stringArray[i]);
}
int length = stringArray.Length;
for(int i=0; i<length; i++)
{
if (intArray[i] > intArray[i + 1])
Console.WriteLine("ok");
else
Console.WriteLine("not ok");
}
}
IndexOutOfRangeException是unhandeled.But怎么样?逻辑是对的,不是吗? 叫我一个菜鸟或者什么,这不是实际的程序,而是它的一部分。
输入样本 -
1,2,3,4 [/enter/]
答案 0 :(得分:1)
你有int Array[i + 1]
其中i
比长度少一个,所以对于最后一项你将超出范围,因为数组从零开始索引;结束循环2少于长度,以便intArray [i + 1]不会超出范围。
for(int i=0; i<length-1; i++)
答案 1 :(得分:0)
如果您使用的是C ++或C#,那么您的第二个循环超出了范围。只是在iin C ++中你必须管理自己的内存空间并且它不会使索引超出范围错误;所以你需要知道何时停止使用C ++。
让我们回到你的代码:
for(int i=0; i<length; i++)
{
if (intArray[i] > intArray[i + 1])
Console.WriteLine("ok");
else
Console.WriteLine("not ok");
}
当i == length - 1这是你的最后一个真实条件时,i + 1超出了数组的范围,因为i + 1 =长度;并且在C#index中从0开始。
修复只是简单地将第二个循环条件更改为i&lt;长度 - 1而不是i&lt;长度