You*_*der 0 subscript qbasic qb64
我正在尝试创建一个代码,生成 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
Run Code Online (Sandbox Code Playgroud)
这实际上不是我的代码。为我的作业复制并粘贴。
看来您遗漏了一些DIM声明。
包含数字的变量SINGLE默认具有类型,因此您可能会看到类似的内容FOR Counter = 18.726493 TO 20,因为该RND函数返回 0 到 1 之间的数字(不包括 1),这意味着您将尝试使用NumArray(18.726493)它不起作用。
未显式声明的数组只能包含索引从 0 到 10 的 11 个项目,但范围 10-30 要求您存储 21 个项目 ( 30 - 10 + 1 = 21)。如果可以使代码更容易理解,您还可以指定自定义上限和下限。在上面显示的代码的第一行之前添加这些行:
DIM Number AS INTEGER
DIM NumArray(10 TO 30) AS INTEGER
Run Code Online (Sandbox Code Playgroud)
这将确保Number仅包含整数(任何小数值都四舍五入到最接近的整数),并且NumArray将从 到 工作NumArray(10),NumArray(30)但不能使用NumArray(9)、NumArray(8)、NumArray(31)等。索引必须在 10-30 范围内。
我认为这应该可以修复您的代码,但我不确定,因为我不完全理解它应该如何工作。至少,它将修复代码中的类型和下标问题。