在php中,数组的索引超过数组的界限是什么原因?

在php中,数组的索引超过数组的界限是什么原因?,第1张

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

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 = 0i<n-1i+=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 = 0i <ni += 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],数字是一个平坦的边缘数组。

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

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

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

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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11793048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存