索引超出了数组界限如何解决?

如题所述

索引超出数组界限,一个是判断一下循环语句中的循环上限是否出错,再一个就是直接更改数组大小。

“索引超出了数组界限"并不是说索引有多长,而是说这个索引在数组的界限当中找不到,可以适当增大数组的大小,使得下面用到的索引能够处在数组的界限中。当然数组不是越大越好,盲目增大数组大小势必会加大内存的开销,响应速度会变慢。

还有一种方法就是使用变量来动态控制数组大小,事先定义一个变量,通过用户的输入来决定这个数组到底有多大,这样避免了内存空间的浪费或者索引超出数组界限的情况出现。另外,由用户来决定数组大小也是要事先设定好上限的,否则用户恶意开销数组空间必然会导致死机。

通常就是定义一个常量,这样将来的程序的可读性好、并且可移植性也好,以 C 语言为例,可以如下定义:#define MAX 30 /* 定义一个元素个数为 30 的常量,将来如果元素个数需要增减、或者减少,都可以根据具体需要修改这一处,而程序中其他所有涉及到的 MAX 都自动修改成新的数值,程序的可移植性好。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-18

限制索引取值范围(0到 (数组长度-1)),或者增加数组的长度。

数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
数组是通过下表进行访问,但超出下标(索引)最大值(数组长度-1)就会访问超出界限。

如:int [] arr= new int[2];;
arr[0]=1;
arr[1]=2;


此数组长度为2,下标最大为1(数组下标从0开始。
如果下标超出0-1这个范围就会出现索引超出界限问题。
限制下标(索引)的取值范围,或者数组长度增加都可以防止索引超出界限。

索引:

在数据库关系图中,可以在选定表的"索引/键"属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。

索引的优点:

1、大大加快数据的检索速度;

2、创建唯一性索引,保证数据库表中每一行数据的唯一性;

3、加速表和表之间的连接;

4、在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。

数组:

在C语言中, 数组 属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

第2个回答  2019-07-19

索引超出了数组界限解决方法:

a.connected[i] = vertices[i+1];

称之为索引i+1。这将导致一个index out of bounds exception。(在你n等于19的例子中:有效索引将是[0-18]。

你的循环将从0-18开始,但是在该行中,它将会添加一个18 + 1 = 19,这是一个无效索引)在你的循环中将条件更改为:

for (int i = 0; i<n-1; i+=2){

确保它在添加之后不会超出界限。

Vertex [] vertices = new Vertex[n]; int [] numbers = new int[n*2]; AdjacencyList[] all = new AdjacencyList [n+1];for (Vertex v : vertices){
System.out.println(v.value);

AdjacencyList a = new AdjacencyList(v);
for (int i = 0; i < n; i += 2)
{

if (numbers[i] == v.value){
a.connected[i] = vertices[i+1];//array index out of bounds exception:19
else { a.connected[i] = v; }
}
all[0] = a; //add the finished adjacency list to the array

}

与n = 19我可以得到一个索引超出边界错误在代码中指出的点。我不确定我哪里会出问题,因为一切都还在19的范围内。

顶点=顶点列表[1-19],数字是一个平坦的边缘数组。

第3个回答  2019-07-19

记得循环的时候,下标是从0开始到N-1,打印出遍历数组的索引十分有帮助,注意一下它的循环条件,也可以加断点。

出现此类问题的原因有多方面。总结一下我所理解的,数组的长度决定了它所能装载的数据的量。还有就是数组计数是从零开始的。例如:当Srring arr[]==new String[6];如果要往里输入名字的话就只能输入六个,多了就是下标越界。

另外数组一般都是与for循环结合起来用,所以用的的时候要注意一下它的循环条件。数组下标越界异常:Java.lang.ArrayIndexOutOfBoundsException,这是一个非常常见的异常,从名字上看是数组下标越界错误,解决方法就是查看为什么下标越界。这种错误就是字符串索引越界。

当处理数组越界时,打印出遍历数组的索引十分有帮助,这样我们就能够跟踪代码找到为什么索引达到了一个非法的值。

所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一。


第4个回答  2020-03-05

1、在test.php文件内,使用header设置test.php执行的编码为utf8,避免输出中文的时候出现乱码。

2、在test.php文件内,创建一个测试的数组,例如,定义一个分类的数组,其对应的索引值分别为0,4,8。

3、在test.php文件内,使用array_values()方法将上一步的数据重新排序,并且从0开始,把重新排序的数组保存在$result变量中。

4、在test.php文件内,使用foreach方法遍历数组,其中$k为索引值,$v为索引值对应的数组值。

5、在test.php文件内,使用echo方法输出数组中的索引值和对应的数组值即可。

相似回答