0

我正在尝试创建一个生成 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

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

4

2 回答 2

4

看起来你错过了一些DIM陈述。

默认情况下,包含数字的变量具有类型SINGLE,因此您可能会看到类似的内容,FOR Counter = 18.726493 TO 20因为该RND函数返回一个介于 0 和 1 之间的数字,不包括 1,这意味着您将尝试使用NumArray(18.726493)哪个不起作用。

未显式声明的数组只能有 10 个项,索引从 0 到 9,但 10-30 范围要求您存储 21 个项 ( 30 - 10 + 1 = 21)。如果您的代码更易于理解,您还可以指定自定义上限和下限。在上面显示的代码的第一行之前添加这些行:

DIM Number AS INTEGER
DIM NumArray(10 TO 30) AS INTEGER

这将确保Number只包含整数(任何小数值都四舍五入到最接近的整数),并且NumArray可以从NumArray(10)to 开始工作NumArray(30),但您不能使用NumArray(9), NumArray(8),NumArray(31)等。索引必须在 10-30 的范围内。

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

于 2020-06-10T03:27:42.380 回答
0

您需要声明数组:

'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
于 2020-12-09T07:33:56.623 回答