1

我正在用 GUI 制作一个计算器,我需要一些帮助。当我在文本框中输入一些数据时,我需要将它存储在一个数组中。这就是我的想法。

    int numOfPackages;//used to get user input

    private void button3_Click(object sender, EventArgs e)
    {
        int[] weight = new int[numOfPackages];

        for(int i = 0; i < numOfPackages; i++)
        {
            weight[i] = Convert.ToInt32(weightBox.Text);
        }

        foreach (int i in weight)
            totalCostLabel.Text = "" + weight[i];

    }

当我尝试显示元素时,它给了我 indexOutOfRange 异常。那么,如何显示该数组的元素?

提前致谢。

4

3 回答 3

5

这条线

foreach (int i in weight)
    totalCostLabel.Text = "" + weight[i];

应该

foreach (int w in weight)
    totalCostLabel.Text = "" + w;

您当前的代码迭代权重数组,并尝试将权重用作权重数组的索引,从而导致索引超出范围异常。

另一个问题是第一个循环:您将所有值设置weight为相同的数字:

weight[i] = Convert.ToInt32(weightBox.Text); // That's the same for all i-s

如果权重不同,它们应该来自不同的权重框,或者来自单个的字符串weightBox应该以产生多个数字的方式处理(例如,通过使用string.Split)。

于 2013-05-01T01:42:12.297 回答
0

您在这里有多个问题。首先是这样的:

    foreach (int i in weight)
        totalCostLabel.Text = "" + weight[i];

这是迭代权重数组并使用该数组中的每个值。然后将该值用作索引。举个例子:

weight[0] = 0
weight[1] = 1
weight[2] = 15

在您的代码中,前两个条目将起作用,因为索引为 0 和索引为 1。但是当它到达最后一个条目时,它会查找索引 15。您可以通过两种方式解决此问题,第一种是使用常规 for 循环:

for(int i=0; i < weight.Length; i++) 
{
    totalCostLabel.Text += weight[i];
}

这带来了第二个错误。您没有在代码中向 totalCostLabel 附加任何内容,您只是替换了该值。这会将所有重量值加在一起作为一个。

另一种方法是使用 foreach 循环:

foreach(int i in weight) 
{
    totalCostLabel.Text += i;
}

这与上面相同,但您不必担心索引。

最重要的是,即使您修复了循环,您也可能需要修复标签获取文本的方式,否则您将无法获得所需的结果。

于 2013-05-01T02:53:55.740 回答
0

也许你想要更像的东西?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        btnAdd.Enabled = false;
    }

    int[] weight;
    int entriesMade;
    int numOfPackages;

    private void btnReset_Click(object sender, EventArgs e)
    {
        if (int.TryParse(numEntriesBox.Text, out numOfPackages))
        {
            weight = new int[numOfPackages];
            entriesMade = 0;
            btnReset.Enabled = false;
            btnAdd.Enabled = true;
            totalCostLabel.Text = "";
        }
        else
        {
            MessageBox.Show("Invalid Number of Entries");
        }
    }

    private void btnAdd_Click(object sender, EventArgs e)
    {
        int value;
        if (int.TryParse(weightBox.Text, out value))
        {
            weight[entriesMade] = value;
            weightBox.Clear();

            totalCostLabel.Text = "";
            int total = 0;
            for (int i = 0; i <= entriesMade; i++)
            {
                total = total + weight[i];
                if (i == 0)
                {
                    totalCostLabel.Text = weight[i].ToString();
                }
                else
                {
                    totalCostLabel.Text += " + " + weight[i].ToString();
                }
            }
            totalCostLabel.Text += " = " + total.ToString();

            entriesMade++;
            if (entriesMade == numOfPackages)
            {
                btnAdd.Enabled = false;
                btnReset.Enabled = true;
                MessageBox.Show("Done!");
            }
        }
        else
        {
            MessageBox.Show("Invalid Weight");
        }
    }

}
于 2013-05-01T05:53:51.887 回答