コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
スケさん ◆YJjXHENp4drH
2018/2/27 10:27
配列変数で、
DIM A$[30]
FOR I=0 TO 30
A$[I]=""
NEXT
するとA$[I]でエラーになるんですがどうしたらいいですか?

コメント

アバター
あんちもん 2018/2/27 11:13 ◆8qCJSJ1bKTIQ
DIM A$[30]で用意される配列変数A$は、A$[0]からA$[29]までの30個だけです(0の分を数え忘れていませんか?)。FOR I=0 TO 30 としてしまうと、I==30の時にDIM命令で使用が宣言されていない31個目の配列変数A$[30]が出来てしまうので、エラーが発生してしまいます。
FOR I=0 TO 29 とすれば解決すると思います。
FORループの終わりにNEXTを書くのもお忘れなく。
アバター
キルル2 2018/2/27 13:48 ◆rGE712Ruejv7
forループで配列を操作するときは終了値を操作するのが一般的です
あんちもんさんが言っているように、0 to 29にしましょう
30という数字を使いたいときは、whileループに変えるのがオススメです
アバター
こういち 2018/2/27 14:54 ◆ou0jbJnEJ0Kb
場合によっては使う変数が1つ減る点と速度面でWHILEは優秀ですが、ほぼ好みの問題ですね。STEP使えば済みますし。
例:
FORの場合
VAR L,I
DIM A$[30]
L=LEN(A$)
PRINT L
FOR I=0 TO L-1
 COPY A$,""
NEXT I

WHILEの場合
DIM A$[30]
VAR I=LEN(A$)
PRINT I
WHILE I
 I=I-1
 COPY A$,""
WEND
アバター
はる 2018/2/27 17:20 ◆75Vh4SY8TdKS
DIM A$[30]を、
DIM A$[31]にするか、
FOR I=0 TO 30を、
FOR I=0 TO 29にします。


説明

A$[I]はIが30のとき、
A$[30]になります。
DIM A$[30]された後のA$の配列添字は、
0〜29(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
16,17,18,19,20,21,22,23,24,25,26,27,28,29)
だけしか使えないので、
30だと、Subscript out of rangeになってしまいます。



最後に、
NEXTを追加します。


説明

BASICはPython等とは違い、
FORループを終わらせるのには、
PHP等のようにそれがコンピュータに分かるように、
終わりの所に書く必要があります。
PHPでは}と書くように、BASICではNEXTを書く必要があります。
アバター
こういち 2018/3/13 18:37 ◆ou0jbJnEJ0Kb
ツララさん
確かにあの例はWHILEの長所が最大限生かせてない例です。
WHILEはDEF~ENDでNを引数として渡すときなどループする回数が事前に決まっているときに真価を発揮すると思います。
DEF SCLR S$,N
 WHILE N
  N=N-1
  COPY S$[N],""
 WEND
END
ただ、前にも言ったとおり好みの問題なので好きなやつを使うべきです。

コメントを書く

この投稿にはコメントできません。

- WEB PATIO -