索引超出了数组界限(数组越界)原因、示例及解决
无论是什么语言,偶尔都会遇到索引超出了数组界限这样的错误提示,也就是数组越界(所用数组索引超出了数组实际索引)。例如,一个数组只有5个元素,数组索引(下标)又是从0开始的,如果定义的数组为 a,这样取取值 a[5],则会报数组越界错误,因为最后一个元素的索引是4,取最后一个元素应该这样 a[4]。
当然,在实际开发过程中很少会犯这么低级的错误,通常都是程序运行产生的动态数组,因某些情况一时没有考虑到而致数组越界。接着就举一些常见的索引超出了数组界限示例,为满足不同的需要,将举 javascript、C# 等语言的实例。
一、javascript 索引超出了数组界限示例
1、示例一:数组索引误从1开始,代码如下:
var arr = [1, 2, 3, 4, 5, 6];
错误:
for(var i = 1; i <= arr.length; i++){
var tmp = arr[i];//当 i = arr.length,数组越界
}
正确:
for(var i = 0; i < arr.length; i++){
var tmp = arr[i];
}
2、未判断数组长度,随意取值导致数组越界
假如要获取网页的所有 div 标签,事先没判断有多少个 div,就直接用下标取值,代码如下:
var arr = document.getElementsByTagName("div");
var temp = arr[1];
如果网页中没有 div 或者只有一个 div,则 arr[1] 会发生数组越界错误,正确代码应该加一句判断:
if(arr.length > 1){
var temp = arr[1];
}
二、C# 索引超出了数组界限示例
假如要取一个文件夹中的所有文本文件,如果用数组长度取最后一个元素,则会产生数组越界错误,代码如下:
/// <summary>
/// C#获取一个文件夹中所有文本文件
/// </summary>
/// <param name="path">文件夹路径</param>
private void GetTxtFiles(string path)
{
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] arrFi = di.GetFiles("*.txt");
//错误
string temp = arrFi[arrFi.Length].Name;//用数组长度取最后一个元素,则产生数组越界
//正确
string temp = arrFi[arrFi.Length - 1].Name;
}
调用:
GetTxtFiles("G:\xq\test");