0

私はイライラしています。私は宿題をしている初心者ですが、なぜ私のメッセージボックスに同じ数字 (計算された最後の小計) が 5 回表示されるのか理解できないようです。for ループを使用して、値をリセットせずに配列に格納する方法がわかりません。誰でも助けることができますか?前もって感謝します。

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;

 namespace InvoiceTotal
 {
 public partial class frmInvoiceTotal : Form
{
    public frmInvoiceTotal()
    {
        InitializeComponent();
    }

    // TODO: declare class variables for array and list here
   decimal[] decArray = new decimal[5];
   int intIndex = 0;


    private void btnCalculate_Click(object sender, EventArgs e)
    {


       try
        {

            if (txtSubtotal.Text == "")
            {
                MessageBox.Show(
                    "Subtotal is a required field.", "Entry Error");
            }
            else
            {
                decimal subtotal = Decimal.Parse(txtSubtotal.Text);
                if (subtotal > 0 && subtotal < 10000)
                {
                    decimal discountPercent = 0m;
                    if (subtotal >= 500)
                        discountPercent = .2m;
                    else if (subtotal >= 250 & subtotal < 500)
                        discountPercent = .15m;
                    else if (subtotal >= 100 & subtotal < 250)
                        discountPercent = .1m;
                    decimal discountAmount = subtotal * discountPercent;
                    decimal invoiceTotal = subtotal - discountAmount;

                    discountAmount = Math.Round(discountAmount, 2);
                    invoiceTotal = Math.Round(invoiceTotal, 2);

                    txtDiscountPercent.Text = discountPercent.ToString("p1");
                    txtDiscountAmount.Text = discountAmount.ToString();
                    txtTotal.Text = invoiceTotal.ToString();

                    for (intIndex = 0; intIndex <= decArray.Length - 1; intIndex++)
                    {
                         decArray[intIndex] = invoiceTotal;
                    }

                }
                else
                {
                    MessageBox.Show(
                        "Subtotal must be greater than 0 and less than 10,000.", 
                        "Entry Error");
                }
            }
        }
        catch (FormatException)
        {
            MessageBox.Show(
                "Please enter a valid number for the Subtotal field.", 
                "Entry Error");
        }
        txtSubtotal.Focus();
    }

    private void btnExit_Click(object sender, EventArgs e)
    {
        // TODO: add code that displays dialog boxes here
     string totalstring = "";
     foreach (decimal value in decArray)
     {
        totalstring += value + "\n";

     }
     MessageBox.Show(totalstring + "\n", "Order Totals");

     this.Close();
    }

} }

4

2 に答える 2

0

宿題なので、手がかりを与えることしかできません。あなたのループは現在1つしか取ってinvoiceTotalいません.ループをまったく使用する必要はありません.コントロールがbtnCalculate_Clickイベントに入ると、計算後、クラスを使用してクラスinvoiceTotalに入れることができます.decArrayレベルintIndex。を増やし、intIndexに値を入力する前に、が より小さいdecArrayかどうかを確認する必要があります。別のアイデアは、不明な数の入力が予想される場合、配列の代わりに使用することです。intIndexarray lengthList<decimal>

于 2013-02-08T05:02:58.447 に答える
0

配列for...loopのすべてのインデックスを合計に設定します。

for (intIndex = 0; intIndex <= decArray.Length - 1; intIndex++)
{
    decArray[intIndex] = invoiceTotal;
}

自問してみてください: その目的は何ですか? 次のように安全に変更できます。

decArray[intIndex++] = invoiceTotal;

それがどのように変化するかを判断するのはあなたに任せます(宿題なので)。

于 2013-02-08T05:10:10.730 に答える