小菜才接触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());
}
这样才会有这个异常