• 締切済み

ヴィジュアルベーシックについて

VBを勉強し始めました。 サイトを見ながらやっているのですが、 そのサイトでの流れに沿って電卓を作っています。 1+ 1=2 となるのですが、 2-1=3 となってしまいます。=ボタンのソースが、 name2=name2 name1 textbox1.text=name2 となっておるのが原因ではないか、と考えています。 ちなみに、 +ボタンのソースは、 name2 = name2 + name1 name1 = Nothing -ボタンのソースは、 If name2 = 0 Then name2 = name1 Else Select Case f Case 1 name2 = name2 + name1 Case 2 name2 = name2 - name1 Case 3 name2 = name2 * name1 Case 4 name2 = name2 / name1 End Select End If name1 = Nothing f = 2 です。 変数の指定は一番最初にしており、 Dim name1 Dim name2 As Double Dim f As String と設定しています。 2-1=3 となってしまう原因で考えられるものをご教授ください。 また、どこを修正すればいいかご教授ください。 最初の最初で躓いて少しショックなのですが、 プログラムに強くなりたく、頑張っています。 よろしくお願いします。。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

> 最初の最初で躓いて少しショックなのですが、 > プログラムに強くなりたく、頑張っています。 プログラミングの全体のうち、「プログラムを作っている」時間はわずかです。 多くの時間は「プログラムを設計する」「作ったプログラムを期待通りに動作するように修正する」ことに費やされます。 まずは、動かない理由を推測することから考えましょう。 > 2-1=3 という現象から、 ・引き算のつもりが足し算になっている と推測されます。その原因としては ・- と書かなければならない箇所が + になっている ・2-1のつもりが2 - (-1)になっている ・ - を入力したときに、「-の処理」を実行せずに、「+の処理」を実行している 等が考えられます。 原因の候補が挙がったら、ひとつずつ確認していきます。 Visual Studio なら、デバッガを使って、要所要所にブレークポイントを置いて一時停止させ、変数の中身を確認したり、ステップ実行させてたりして、期待通りになっているか調べるのがよいでしょう。 > =ボタンのソースが、 > name2=name2 name1 > textbox1.text=name2 > となっておるのが原因ではないか、と考えています。 ○ そう思った理由は? ○ ここが間違いであることで、現在起っている現象の説明ができますか? 「動作するプログラム」なら、「期待通り」に動作しない場合でも「書いた通り」には動作します。 「ここが間違いだ」というのなら、それが間違いを引き起す理由が説明できるはずなのです。 > name2=name2 name1 これ、ビルドエラーになりませんか? デバグ実行しようとして「ビルドエラーになりました。前回のビルドを実行しますか?」みたいに聞かれて、「はい」を押していませんか? ビルドエラーが出ている限り、今のプログラムをいくら修正しても、修正できたかどうかの確認はできません。 > -ボタンのソースは、 これを見ると、 - ボタンを押したときに 前回までの結果 前回押したボタン演算子 今回の値 を計算して、-ボタンを押した、ということを記録しているように見えます。 123 ← 数字を入力: name1になる - ← name2=123, f=2 21 ← 数字を入力: name1になる - ←f=2より、select~caseで name2=123-21→ name2=112 が実行される,f=2 .... となると、 + にも = にも同じ処理が入っていないと、計算が合わなくなるのでは? 期待する動作 2 ← 数字を入力: name1になる - ← name2=2, f=2 1 ← 数字を入力: name1になる = ←f=2より、select~caseで name2=2-1→ name2=1 が実行される =ボタンのソースが、「name2=name2 + name1」の場合に行われると予想される動作 2 ← 数字を入力: name1になる - ← name2=2, f=2 1 ← 数字を入力: name1になる = ← name2=2+1→ name2=1 ※なお、同じ処理が必要だからといって、コピペしてはいけません。 同様の処理は、subやfunctionにまとめるようにしましょう

関連するQ&A