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