如何修复 QBASIC 中的错误"subscript out of range"?



我正在尝试创建一个代码,该代码在 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

相关内容

  • 没有找到相关文章

最新更新