質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Q&A

解決済

2回答

7311閲覧

プログラムのエラー(インデックスが配列の境界外です。)

k.min

総合スコア12

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

0グッド

0クリップ

投稿2016/09/24 06:04

###前提・実現したいこと
2次元の拡散方程式を解くプログラムをVBで作っています。
実行しても、次のエラーで止まってしまいます。

初心者なんで、全くわからないです。

###発生している問題・エラーメッセージ
インデックスが配列の境界外です。

###該当のソースコード
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call Cl_ion_Calculate()
End Sub

Sub Cl_ion_Calculate() Dim b, h, wcr, ic, bc, dx, dy, dt, t, tmax, rx, ry As Double Dim i, j, l, m, n, p, q, r, s, x, y As Integer Dim c1(x, y), c2(x, y) As Double b = Val(TextBox1.Text) h = Val(TextBox2.Text) wcr = Val(TextBox3.Text) dx = Val(TextBox4.Text) dy = Val(TextBox5.Text) dt = Val(TextBox6.Text) ic = Val(TextBox7.Text) bc = Val(TextBox8.Text) tmax = Val(TextBox9.Text) t = tmax / dt x = b / dx y = h / dy rx = dt / dx ^ 2 ry = dt / dy ^ 2 For i = 0 To x For j = 0 To y c1(i, j) = ic ←ここで止まります。 Next j Next i For l = 1 To t For m = 1 To x c2(m, 0) = bc Next m For n = 1 To y c2(0, n) = bc c2(b, n) = bc Next n For p = 1 To x - 1 For q = 1 To y - 1 c2(p, q) = (1 - 2 * rx) * c2(p, q) + rx * c2(p - 1, q) + rx * c2(p + 1, q) + (1 - 2 * ry) * c2(p, q) + ry * c2(p, q - 1) + ry * c2(p, q + 1) Next Next For r = 0 To x For s = 0 To y c1(r, s) = c2(r, s) Next Next Next MsgBox(c2(r, s)) End Sub

End Class

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

エラーメッセージの意味はググればすぐに分かるので説明しません。(エラーメッセージをそのまま検索エンジンに投げてください)

配列c1c2の宣言を以下のように変更します。

Dim c1(,), c2(,) As Double

c1c2の初期化は、For文の手前で以下のようにします。

c1 = New Double(x, y) {} c2 = New Double(x, y) {} For i = 0 To x For j = 0 To y c1(i, j) = ic Next j Next i

Windowsマシンが現在手元にないので検証はしていません。
間違ってたらごめんなさい。

投稿2016/09/24 06:29

carimatics

総合スコア740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Dim c1(x, y), c2(x, y) As Doubleの時点で、xとyに何も代入されていませんので、既定値の「0」となっています。つまり、1×1しかありません。

動的に範囲を決める必要があるなら、ReDimNewで別個確保しましょう。

投稿2016/09/24 06:16

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問