アプリ版:「スタンプのみでお礼する」機能のリリースについて

IF文でiとjの足す処理が括弧にくくられているので、きちんと足される思ったのですがラベルでの実行結果が0になります。

コード上は計算されているように見えるのですがなぜ計算されていないのでしょうか?計算できないとしたらIF文の中では計算処理ができないということでしょうか?
回答のほどよろしくお願い致します。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i, j
i = 0
j = 0
If (i = i + 1) = 0 Or (j = j + 1) = 0 Then
MessageBox.Show("+1")
End If
Label1.Text = i
Label2.Text = j
End Sub

A 回答 (3件)

VBでは、条件式のところで代入はできませんし


代入式をCの様に式として使用できません
>If (i = i + 1) = 0 Or (j = j + 1) = 0 Then
の部分は、
まずカッコの中が評価されて
(i = i + 1)
iはi+1と等しいか?<等しくないので0になる
(j = j + 1)
jはj+1と等しいか?<等しくないので0になる
それで、
if 0=0 or 0=0 then
の意味になります。
0=0は成り立つのでifの中が実行されることになりますがiやjの値は更新はされません。

BASICでは、代入文は
SET I=I+1
のように書く必要があります。
I=I+1
と書けるのは、SETが省略できるからです。
このように代入文は、独立していなければなりません。
なので、IFなどの条件式のなかで代入式は記述できません。
    • good
    • 0
この回答へのお礼

分かりやすい回答ありがとうございます。
i = i + 1のような代入文が比較式として扱われているとは思いもよりませんでした。
とりあえずIFなどの条件式では代入文は使用できないことを覚えておきます。

お礼日時:2005/05/30 09:27

あ、すいません。

手元に.NETがないので確認しないまま書いてしまいました。Cと混同していました。

文法エラーなら、計算処理と代入処理を分けて下さい。IF文の中はあくまで比較のみ、という事です。


※リンク貼りなおしておきます

参考URL:http://www.microsoft.com/japan/msdn/net/vbnetref …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Cと混合していたということで了承致しました。
とりあえず、IF文のなかでは比較式でないと駄目だという事を覚えておきます。

お礼日時:2005/05/30 09:25

参考URLをみてください。


(i = i + 1) = 0でいうと、=は比較条件式と判断され、iとi+1が比較された結果(この場合false)と0が比較されていますので、iには結果として何も代入されていません。お望みの場合は+=の「代入を伴う演算子」を使ってください。

参考URL:http://www.microsoft.com/japan/msdn/library/defa …

この回答への補足

回答ありがとうございます。
代入を伴う演算子を使用しましたが、エラーが出て実行できません。なぜでしょうか?
回答のほどよろしくお願い致します。
If i += 1 = 0 Or j += 1 = 0 Then ←文法エラー

補足日時:2005/05/29 21:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!