我正在尝试创建一个代码,该代码在 10-30 范围内生成随机数,但请确保没有重复的数字。当我运行代码时,它在NumArray(Count) = Count
上显示"下标超出范围"。
'Make an array of completely sorted numbers
FOR Count = 10 TO 30
NumArray(Count) = Count
NEXT Count
RANDOMIZE TIMER
FOR Count = 10 TO 30
Number = (RND * (31 - Count)) + 10
PRINT #1, NumArray(Number)
FOR Counter = Number TO 30 - Count
NumArray(Counter) = NumArray(Counter + 1)
NEXT Counter
NEXT Count
这实际上不是我的代码。为我的作业复制并粘贴。
看起来你缺少一些DIM
语句。
默认情况下,包含数字的变量具有类型SINGLE
,因此您可能会看到类似FOR Counter = 18.726493 TO 20
的内容,因为RND
函数返回一个介于 0 和 1 之间的数字,不包括 1,这意味着您将尝试使用不起作用的NumArray(18.726493)
。
未显式声明的数组只能有 11 个项目,索引从 0 到 10,但范围 10-30 要求您存储 21 个项目(30 - 10 + 1 = 21
(。 您还可以指定自定义上限和下限,如果这将使您的代码更易于理解。 在上面显示的代码的第一行之前添加以下行:
DIM Number AS INTEGER
DIM NumArray(10 TO 30) AS INTEGER
这将确保Number
只包含整数(任何小数值都四舍五入到最接近的整数(,并且NumArray
将从NumArray(10)
到NumArray(30)
工作,但你不能使用NumArray(9)
、NumArray(8)
、NumArray(31)
等。 索引必须在 10-30 范围内。
我认为这应该可以修复您的代码,但我不确定,因为我不完全了解它应该如何工作。 至少,它将修复代码中的类型和下标问题。
你需要声明数组:
'Make an array of completely sorted numbers
DIM NumArray(30) AS INTEGER
FOR Count = 10 TO 30
NumArray(Count) = Count
NEXT Count
RANDOMIZE TIMER
FOR Count = 10 TO 30
Number = (RND * (31 - Count)) + 10
PRINT #1, NumArray(Number)
FOR Counter = Number TO 30 - Count
NumArray(Counter) = NumArray(Counter + 1)
NEXT Counter
NEXT Count