日期:2014-05-18  浏览次数:20890 次

小菜才接触C#,做了一道题目,如题!
40. 编写一个冒泡法排序程序,要求在程序中能够捕获到数组下标越界的异常。
  以下是代码:
C# code
int[] a = new int[5];
            try
            {
                for (int k = 0; k < 5; k++)
                {
                    a[k] = int.Parse(Console.ReadLine());
                }
                for (int j = 0; j < a.Length - 1; j++)
                {
                    for (int i = 0; i < a.Length - 1; i++)
                    {
                        int t;
                        if (a[i] > a[i + 1])
                        {
                            t = a[i];
                            a[i] = a[i + 1];
                            a[i + 1] = t;
                        }
                    }
                }

            }
            catch (Exception)
            {
                Console.WriteLine("数组下标越界");
                return;
            }
            foreach (int z in a)
            {
                Console.WriteLine(z);
            }

我运行感觉怎么没捕捉到了,求解答

------解决方案--------------------
catch ( IndexOutOfRangeException ex)
{
Console.WriteLine(ex);
return;
}

或者换成Exception
------解决方案--------------------
嘿嘿 冒泡 排序 你的循环 条件有问题你 这样 排序是排不正确的
------解决方案--------------------
楼上的 把 第二次循环 些成了 死的 也不是很好的选择 看看我这个吧
for(int i=0;i <a.Length;i++)
{
for(int j=a.Length;j> i;j--)
{
if(a[i]> a[j])
{
这里的你就自己写吧
}
}
}
------解决方案--------------------
i 和 j 的范围都是 [0, (Length - 2)],注意,你的判断是 < Length - 1,当前 length 是 5,所以 i 和 j 的范围就是 0 ~ 3,加个 1,范围就是 1 ~ 4,怎么都越不了界啊。
------解决方案--------------------
你的算法没有错,而且不会触发数组下表越界这个异常。
for (int k = 0; k < 5; k++)
{
a[k] = int.Parse(Console.ReadLine());
}
这就是个长度为5的数组,根本就不会越界。
for (int k = 0; k < 6; k++)
{
a[k] = int.Parse(Console.ReadLine());
}
这样才会有这个异常