如何修复 QBASIC 中的“下标超出范围”错误?

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)

这实际上不是我的代码。为我的作业复制并粘贴。

Mem*_*ect 5

看来您遗漏了一些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 范围内。

我认为这应该可以修复您的代码,但我不确定,因为我不完全理解它应该如何工作。至少,它将修复代码中的类型和下标问题。