-1

I am getting "System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'" error at run time while trying to print values of array using foreach loop. I debugged the problem in visual studio and can see that i in foreach is going till 7 which is out of bounds. foreach loop automatically takes all the elements of an array so please help me in understanding the reason for the error? Below is the function:

    void Sort(int[] A)
    {
        for (int i = 1; i < A.Length; i++)
        {
            int key = A[i];
            int j = i - 1;
            while (j >= 0 && A[j] > key)
            {

                A[j + 1] = A[j];
                j = j - 1;
            

            }
            A[j + 1] = key;
        }

        foreach (int i in A)
            Console.Write(A[i].ToString());

    }

}

}

User05
  • 33
  • 3

1 Answers1

5

I think you misunderstood the usage of foreach loop. Change-

foreach (int i in A)
    Console.Write(A[i].ToString());

to-

foreach (int i in A)
    Console.Write(i.ToString());

In the loop above i is an element in A not the index of element. For loops will give you the index:

for (int i = 0; i < A.Length; i++)
    Console.WriteLine(A[i].ToString());

Consider this Example to understand the usage of for loops and foreach loops:

int[] test = { 9, 8, 7, 6, 5, 4 };

foreach (int i in test)
    Console.WriteLine(i);

Console.WriteLine();

for (int i = 0; i < test.Length; i++)
    Console.WriteLine(i);

Console.WriteLine();

for (int i = 0; i < test.Length; i++)
    Console.WriteLine(A[i]);

// Output:
// 9
// 8
// 7
// 6
// 5
// 4
//
// 0
// 1
// 2
// 3
// 4
// 5
//
// 9
// 8
// 7
// 6
// 5
// 4

And also note that there is no need for .ToString() when you want to print an integer. Just write Console.WriteLine(myInteger);.