2013-05-01 119 views
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例外。 那么,我该如何显示该数组的元素?

在此先感谢。

+3

请至少阅读[关于文档的foreach(http://msdn.microsoft.com/en-us/library/ttw7t8t6%28v=vs.100%29.aspx)。 – 2013-05-01 01:48:56

回答

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)。

+0

哦,我没有解释,numOfPackages是用户必须输入的数字。但我增加了我,为什么它试图将输入存储在相同的索引? – 2013-05-01 01:47:53

+0

@RomanGusan你应该通过编辑问题来解释它。我期望'numOfPackages'来自另一个文本框,或者可能是一个不同的UI元素,对吗? – dasblinkenlight 2013-05-01 01:50:07

0

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

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

这是迭代weight数组并使用该数组中的每个值。然后,您将该值用作索引。看看下面的例子:

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; 
} 

这是与上面相同,但你不必担心索引。底线,即使你修好你的循环后,你可能需要修复标签接受文本的方式,否则你不会得到你想要的结果。

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"); 
     } 
    } 

} 
相关问题