40. 编写一个冒泡法排序程序,要求在程序中能够捕获到数组下标越界的异常。
以下是代码: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);
}
我运行感觉怎么没捕捉到了,求解答
以下是代码: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);
}
我运行感觉怎么没捕捉到了,求解答
是不是就是int[] a = new int[5];
int b=a[6];
索引超出了数组界限?
LZ,你for循环里 一个个自己 让下算,如果[]大于5 就报异常了。
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; j++)
{
for (int i = 0; i < a.Length; i++)
{
int t;
if (a[i] > a[i + 1])
{
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
} }
catch (IndexOutOfBoundsException ex)
{
Console.WriteLine(ex);
return;
}
报错啊,杂回事!不过还是感谢了!
{
Console.WriteLine(ex);
return;
}或者换成Exception
{
Console.WriteLine(ex);
return;
}或者换成Exception
直接输出a[5],不就得了!
IndexOutOfBoundsException换成IndexOutOfRangeException
for(int i=0;i<a.Length;i++)
{
for(int j=a.Length;j>i;j--)
{
if(a[i]>a[j])
{
这里的你就自己写吧
}
}
}
static List<int> list = new List<int>() { 72, 54, 59, 30, 31, 78, 2, 77, 82, 72 };
static void Main(string[] args)
{
Bubble();
PrintList();
}
static void Bubble()
{
int temp = 0;
for (int i = list.Count; i > 0; i--)
{
for (int j = 0; j < i - 1; j++)
{
if (list[j] > list[j + 1])
{
temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
}
PrintList();
}
}
private static void PrintList()
{
foreach (var item in list)
{
Console.Write(string.Format("{0} ", item));
}
Console.WriteLine();
}
正确的应该是:
for(int j=0;j<a.Length-1;j++)
{
for(int i=j+1;i<=a.Length-1;i++)
{
int t;
if(a[j]>a[i])//从小到大排序
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
} }
你里面循环条件都是没有等号,所以
k的范围0~4
i的范围0~3 i+1的范围1~4
j的范围0~3
而a数组范围0~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());
}
这样才会有这个异常