2017-02-10 16 views
0

宿題の変更プログラムを作成し、金額が入力されたときに変更額を返す必要があります(それはオーストラリアの通貨に基づいています)、私は50セントマークまで働いています。変更が計算され、プログラムが20セント、10セント、五パーセント変化の値を返す必要があり、プログラムがC#変更プログラム

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void btnCalculate_Click(object sender, EventArgs e) 
    { 
     double change = Convert.ToDouble(txtOffered.Text) - Convert.ToDouble(txtDue.Text); 
     // MessageBox.Show(change.ToString());    
     double hund = 100; 
     double fifty = 50; 
     double twent = 20; 
     double ten = 10; 
     double five = 5; 
     double two = 2; 
     double one = 1; 
     double fifcent = 0.50; 
     double twentcent = 0.20; 
     double tencent = 0.10; 
     double fivecent = 0.05; 


     while (change > 0) 
     { 
      if (change >= hund) 
      { 
       txtChange.Text += "1x $100 \r\n"; 
       change = change - hund; 
      } 


      else if (change >= fifty) 
      { 
       txtChange.Text += "1x $50 \r\n"; 
       change = change - fifty; 
      } 
      if (change >= twent) 
      { 
       txtChange.Text += "1x $20 \r\n"; 
       change = change - twent; 
      } 
      else if (change >= ten) 
      { 
       txtChange.Text += "1x $10 \r\n"; 
       change = change - ten; 
      } 
      if (change >= five) 
      { 
       txtChange.Text += "1x $5 \r\n"; 
       change = change - five; 
      } 
      else if (change >= two) 
      { 
       txtChange.Text += "1x $2 \r\n"; 
       change = change - two; 
      } 
      if (change >= one) 
      { 
       txtChange.Text += "1x $1 \r\n"; 
       change = change - one; 
      } 
      else if (change >= fifcent) 
      { 
       txtChange.Text += "1x 50c \r\n"; 
       change = change - fifcent; 
      } 
      if (change >= twentcent) 
      { 
       txtChange.Text += "1x 20c \r\n"; 
       change = change - twentcent; 
      } 
      else if (change >= tencent) 
      { 
       txtChange.Text += "1x 10c \r\n"; 
       change = change - tencent; 
      } 
      if (change >= fivecent) 
      { 
       txtChange.Text += "1x 5c \r\n"; 
       change = change - fivecent; 
      } 

     } 

    } 
} 
+2

ここで、デバッグする方法、アプリをトレースする方法、詰まった場所を確認する時間です! – BugFinder

+0

これはアプリをフリーズさせるべきではありませんが、おそらく最初の "if"を除いてどこでも "else if" – dlxeon

答えて

0

をフリーズされている場合、あなたが金額< 0.05を入力するか、またはあなたが金額を受け取る場合はアプリが立ち往生します変更結果の後に< 0.05。

理由はここにあります:変更変数の値が0より大きいが、< 0.05であれば、永遠に詰まるでしょう。

while (change > 0) 
{ 
    ... 
    if (change >= fivecent) 
    { 
     txtChange.Text += "1x 5c \r\n"; 
     change = change - fivecent; 
    } 
} 
0

これはおそらく見つけにくいかもしれません。あなたのコードの問題は間違ったデータ型を使用していることです。 doubleの代わりに、あなたはdecimalを使用する必要があります。これにより

decimal change = Convert.ToDouble(txtOffered.Text) - Convert.ToDouble(txtDue.Text); 
// MessageBox.Show(change.ToString());    
decimal hund = 100; 
decimal fifty = 50; 
decimal twent = 20; 
decimal ten = 10; 
decimal five = 5; 
decimal two = 2; 
decimal one = 1; 
decimal fifcent = 0.50m; 
decimal twentcent = 0.20m; 
decimal tencent = 0.10m; 
decimal fivecent = 0.05m; 

を、あなたのコードは凍結しないでしょう。この説明については

、問題がdoubleを使用して0.25 - 0.20の結果は... 0.049999999999999989である、ということでした。ダブルは浮動小数点値を使用するため、丸めの問題が発生することがあります。浮動小数点計算の詳細については、hereをご覧ください。

関連する問題