在比较两个数组元素时索引超出范围

时间:2015-12-02 06:44:55

标签: c# if-statement for-loop

这是我试图解决的更大问题的一部分,但索引超出范围异常对我来说似乎是一个无形的障碍。 这个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/]

2 个答案:

答案 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;长度