2017-03-12 9 views
0

私は、車両が駐車していた場合に誰かがどれだけ支払う必要があるかを計算するプログラムを作っています。ラジオボタンを使って車の種類を選択しようとしています。車(ラジオボタン1)が選択されている場合、アルゴリズムは機能しますが、トラック(ラジオボタン2)が選択されても機能しません。ここに私のコードラジオボタンを使っていくつかの基本的な計算を行う

// cars 
     if (radioButton1.Checked == true) 
     { 



      int hac = Convert.ToInt16(txthrs.Text); 
      int h1c = 5; 
      int h2c = 3; 



      if (txthrs.Text == "1") ; 
      money.Text = h1c.ToString(); 

      if (hac < 1) ; 
      money.Text = (h1c + (hac - 1) * h2c).ToString(); 
      // end of cars 
      // trucks 
      if (radioButton2.Checked == true) 
      { 

       int hat = Convert.ToInt16(txthrs.Text); 
       int h1t = 6; 
       decimal h2t = 3.5m; 



       if (txthrs.Text == "1") ; 
       money.Text = h1t.ToString(); 

       if (hat < 1) ; 
       money.Text = (h1t + (hat - 1) * h2t).ToString(); 
      } 
     } 
    } 
} 

}

+0

それは完全な例を示してください入力ボックスが1より大きいとき、それは各時間 – jayjay1487

+0

3の代わりに、5の追加を開始しますので、そこにあります。コピーしてコンパイルして実行できるだけのコードを用意してください。 –

答えて

0

あなたが入れ子になってきている、あなたのif文、ラジオボタンのいずれかがチェックされている場合にのみ実行されますif文秒。最初のブロックから2番目のブロックを移動します。

2

トラック(ラジオボタン2)を選択しても動作しません。

if (hac < 1) ;(hat < 1) ;は全く何もしないのでまず、あなたはそれが自分自身でちょうど表現ですが、いくつかの論理的なミスを持っています。そのことを念頭に置いて、これらの論理エラーを取り除くためにコードを更新しました。

第2に、Equals()メソッドを使用する代わりに、をstringsを比較するために使用しないでください。

第3に、radioButton2条件は、予期しない動作を引き起こすため、条件内にネストされます。あなたはこのようにそれらを分離することによってそれを解決することができます。

if (radioButton1.Checked == true) 
{ 
     int hac = Convert.ToInt16(txthrs.Text); 
     int h1c = 5; 
     int h2c = 3; 

     if (txthrs.Text.ToString().Equals("1")) 
      money.Text = h1c.ToString(); 

     if (hac < 1) 
      money.Text = (h1c + (hac - 1) * h2c).ToString(); 
} 

if (radioButton2.Checked == true) 
{ 
    int hat = Convert.ToInt16(txthrs.Text); 
    int h1t = 6; 
    decimal h2t = 3.5m; 

    if (txthrs.Text.ToString().Equals("1")) 
      money.Text = h1t.ToString(); 
    if (hat < 1) 
      money.Text = (h1t + (hat - 1) * h2t).ToString(); 

} 
+0

文字列( 'txthrs.Text.ToString()'でToStringを呼び出す必要はありません。第2に、演算子==は文字列に対してオーバーライドされるので、カルチャ情報を渡さない限り、Equals()を呼び出す必要はありません。 – pinkfloydx33

+0

@ pinkfloydx33私は知っています。あなたはToStringを呼び出す必要はありません文字列(txthrs.Text.ToString() "と私は最後のどちらにもなりませんね)私はいつも人に言っているように、私はプログラミングに関してはできるだけ明示的にしたいと思っています –

+1

あなたが本当に欲しいと思っているのは、私が思っている通りです。 Btw明示的にする場合は、 'ToInt16'は' short'を返します。少なくともToInt32を呼び出すか、int.ryParseを使用する方がいいです(データがユーザーから来ているので、私はOPコードですあなたが自分のToString呼び出しを追加し、より良いことが指摘されていることを変更することをお勧めする場合は、その点を指摘してください) – pinkfloydx33

関連する問題