プロが教える店舗&オフィスのセキュリティ対策術

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
となってしまう原因で考えられるものをご教授ください。

また、どこを修正すればいいかご教授ください。

最初の最初で躓いて少しショックなのですが、
プログラムに強くなりたく、頑張っています。

よろしくお願いします。。

A 回答 (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にまとめるようにしましょう
    • good
    • 0

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