• ベストアンサー

(.NET)IF文の計算結果が思ったのと違う!?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.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などの条件式のなかで代入式は記述できません。

yukikundesuyo
質問者

お礼

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

その他の回答 (2)

  • ftomo100
  • ベストアンサー率41% (297/723)
回答No.2

あ、すいません。手元に.NETがないので確認しないまま書いてしまいました。Cと混同していました。 文法エラーなら、計算処理と代入処理を分けて下さい。IF文の中はあくまで比較のみ、という事です。 ※リンク貼りなおしておきます

参考URL:
http://www.microsoft.com/japan/msdn/net/vbnetref/vbnetref3-4.asp
yukikundesuyo
質問者

お礼

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

  • ftomo100
  • ベストアンサー率41% (297/723)
回答No.1

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

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnbvbnet/htm/vbdotnetprogramingref3
yukikundesuyo
質問者

補足

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