Julia数组访问报错BoundsError: attempt to access 0-element Vector{Int64} at index [1]如何解决
Julia BoundsError 问题排查及修复
错误原因
你声明的newNum = Int64[]是长度为0的空Int64向量,Julia不支持直接对空向量的指定下标位置赋值,只有预先分配了对应长度的数组存储空间,或是使用追加元素的方法操作数组,才能正常写入值。代码第一次循环执行到newNum[i] = seed时,i=1,尝试给长度为0的数组的第1位赋值,直接触发了边界错误。
修复方案
提供两种可行的修改方式,任选其一即可:
- 方案1:预先分配数组长度
提前给newNum分配和循环次数匹配的存储空间,即可直接用下标赋值,修改后的完整代码如下:seed = 1234 N = 2 newNum = Vector{Int64}(undef, N) for i in 1:N seq = digits(seed*seed, pad=8) seed = seq[6]*1000+seq[5]*100+seq[4]*10+seq[3] newNum[i] = seed end newNum[2] - 方案2:动态追加元素
使用Julia内置的push!方法,每次循环把新生成的seed追加到数组末尾,不需要提前指定数组长度,修改后的完整代码如下:seed = 1234 N = 2 newNum = Int64[] for i in 1:N seq = digits(seed*seed, pad=8) seed = seq[6]*1000+seq[5]*100+seq[4]*10+seq[3] push!(newNum, seed) end newNum[2]
内容的提问来源于stack exchange,提问作者user10905494
相关产品推荐
相关产品推荐

