2012-02-27 6 views
0

は私が極めて新しい私のクラスのVisual Studio 2010文とデバッグ

にしていた場合は接近して混乱、私は電卓を作成する必要があります。この問題の要件は、AまたはBがゼロの場合、プログラムが実際にAまたはBを計算しないことです。代わりに、プログラムは、ゼロでない変数の値を結果に代入し、両方がゼロの場合は、答えをゼロにします。ここで

は私のコードです:次のように

Public Class Form1 


    Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click 

     Dim A As Decimal 
     Dim B As Decimal 
     Dim Result As Decimal 

     A = ABox.Text 
     B = BBox.Text 

     A = Decimal.Parse(ABox.Text) 
     B = Decimal.Parse(BBox.Text) 

     If (ABox.Text = 0) Then 

      ResultLabel.Text = BBox.Text 

     End If 

     If (BBox.Text = 0) Then 

      ResultLabel.Text = ABox.Text 

     End If 

     If (BBox.Text = 0 And ABox.Text = 0) Then 

      ResultLabel.Text = 0 

     End If 

     Result = A + B 

     ResultLabel.Text = Result.ToString("N2") 

    End Sub 

私の質問は以下のとおりです。

  1. は、このために文が良い場合であるか、より良い/キャッチしてみてくださいでしょうか?
  2. コードが正しくない場合でも、答えが自動的に正しいので(たとえば、9 + 0は9かどうか、IfまたはTry/Catchが実際に機能するかどうかにかかわらず)、ステップバイステップの適切なステップバイステップのキーです。これを行う最適な方法は何ですか?私は1つのメニューに、プログラムが以前にどのように機能したかを段階的に表示しましたが、何らかの理由で、私がそれを閉じた後にウィンドウを見つけることができないようです。私はブレークポイントでデバッグするので、ステップバイステップでそれを見たいです。

これらのタイプの条件演算子については、他のヒントがありますか?

申し訳ありません。私はこのタイプの問題をカバーするトピックをここで見つけることができませんでした。

+0

A = 0の場合はA + B = B、B = 0の場合はA + B = A、両方が0の場合はA + B =言い換えれば0、あなただけのA + Bを計算し、条件付きのものをいまいましいことができます。 – cHao

+0

は、このより良いですか? (A = 0)すると ResultLabel.Text = B 終了する場合(B = 0の場合 の場合)Then ResultLabel.Text = A 終了の場合 、どのように私は正確に何を見つけるために、ステップバイステップのデバッグを見つけるに行くか(BBox.Text = 0とABox.Text = 0)すると ResultLabel.Text = 0 終了 – user1234703

+0

ifとも場合プログラムはすべてのステップを出力していますか?事前に助けてくれてありがとう! – user1234703

答えて

1

OK ...まず、Ifはまったく必要ありません。 (追加の識別プロパティ:任意のxの場合はx + 0 = x)。あなたがそれらに到達する前に起こることになるエラーは、ABoxが0に、BBoxの場合値が "5.000000"のようなものであれば、それらのゼロはすべて結果にコピーされます。同様にボックスが逆である場合。

また、Decimal.Parseの代わりにDecimal.TryParseを使用すると、入力ボックスに数字のないものはプログラムを強制終了しません。彼らはただあなたが本当に、本当に、本当に必要があるいくつかの愚かな理由のためならばあなたは

Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click 
    Dim A as Decimal, B as Decimal 
    Decimal.TryParse(ABox.Text, A) 
    Decimal.TryParse(BBox.Text, B) 
    ResultBox.Text = (A + B).ToString("N2") 
End Sub 

のようないくつかのコードと同様の結果(マイナスの余分なゼロ)を取得したい0

になってますよすべての場合は、ElseIfを使用して、デフォルトのケースが実行されないようにします。

Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click 
    Dim A as Decimal 
    Dim B as Decimal 
    Decimal.TryParse(ABox.Text, A) 
    Decimal.TryParse(BBox.Text, B) 
    If A = 0 then 
     ResultBox.Text = BBox.Text 
    ElseIf B = 0 then 
     ResultBox.Text = ABox.Text 
    Else 
     Dim result as Decimal = A + B 
     ResultBox.Text = result.ToString("N2") 
    End If 
End Sub 

しかし、それは無駄です。さらに悪いことに、2つの数字を追加するのがポイントであれば間違っています。誰かが最初の箱に「I Like Cheese」と「YAAAAAAAAY !!!」を入れることができました。もう一方は「YAAAAAAAAAY !!!」となります。明らかに何が起こるべきでないか。

Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
Handles AddButton.Click 
    Dim A as Decimal 
    Dim B as Decimal 
    Try 
     A = Decimal.Parse(ABox.Text) 
     B = Decimal.Parse(BBox.Text) 
     ResultBox.Text = (A + B).ToString("N2") 
    Catch ex as FormatException 
     MessageBox.Show("Exactly two numbers (one per box), please!") 
    End Try 
End Sub 

しかし、私はそれをユーザーの入力に嫌っています。 は、ユーザーが悪意のあるかばかげていると予想して、あなたのアプリを台無しにするためにできることすべてをやっていると考えてください。それは後で多くのデバッグを保存します。しかし、最悪の場合、不正入力はであり、実際にはは例外的な状態ですか?私はいいえと言います。 (他の人は同意しないかもしれませんが、間違っています:)

ユーザーに入力エラーを通知したい場合は、Decimal.TryParseも成功したかどうかを示すブール値(真偽)を返します。失敗した場合は、ユーザーに馬鹿をやめるように指示するメッセージを表示することができます。 (あなたがしたい場合はもう少し外交、。)


第二に... Option Strictをオンにします。お願いします。この暗黙のキャスティングは私にすべての義をもたらします。それはおそらくあなたのリストにダースのようなエラーを追加することに注意してください...それは良いものです。文字列変数に数値を入れようとしているときには注意が必要です。そのため、多くの魔法が発生します(私の意見では)人々はもっと意識する必要があります。


K、今、デバッグのために...私のアドバイスにこの点まで従っていれば、本当にデバッグする必要はありません。例外はなくなり、コンパイルする前にコードがより正確になるようになります。しかし、それでも必要ならば、プログラムをステップバイステップで進める1つの方法は、Function行またはブレークポイントを宣言ではない最初の行に設定することです。 (行の隣にある左の余白をクリックすると、クリックした場所の赤い部分に余白が表示されるので、そこにブレークポイントがあることがわかります)。おそらく宣言にブレークポイントを設定しようとすることもできますが、ブレークポイントが実際に何かをする次の行にあるか、関数の先頭にあることに注意してください。私は忘れて、このマシンでVSをチェックしないでください)

VSからプログラムを実行すると、プログラムが起動し、ブレークポイントに達すると、VSはフォアグラウンドに黄色い矢印は赤いボールがあるところです。その黄色の矢印は実行される次の行を指します。そこから、デバッグツールバーを使用することができます(ツールバー内を見て、青いと思う、再生/停止/等のボタンのような余分なボタンを持っている必要があります)コードをステップ実行します。また、 'Locals'、 'Watches'などのウィンドウと、価値のあるデバッガに表示されると思われるその他のウィンドウも表示されます。 :)

プログラムがブレークポイントで停止している間、またはコードをステップ実行している間、アプリケーションはフリーズしたように見えます。 UIアップデートはすぐには表示されないため、入力ボックスに何も入力したり、再開するまでボタンを押したりすることはできません(「再生」ボタンを押す)。

+0

非常に詳細で素晴らしい応答ありがとう! – user1234703