如何显示数组元素,如果元素的数量是一个变量
我在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例外。 那么,我该如何显示该数组的元素?
在此先感谢。
此行
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
)。
哦,我没有解释,numOfPackages是用户必须输入的数字。但我增加了我,为什么它试图将输入存储在相同的索引? – 2013-05-01 01:47:53
@RomanGusan你应该通过编辑问题来解释它。我期望'numOfPackages'来自另一个文本框,或者可能是一个不同的UI元素,对吗? – dasblinkenlight 2013-05-01 01:50:07
这里有多个问题。首先是这样的:
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;
}
这是与上面相同,但你不必担心索引。底线,即使你修好你的循环后,你可能需要修复标签接受文本的方式,否则你不会得到你想要的结果。
也许你想要更类似的东西?
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");
}
}
}
请至少阅读[关于文档的foreach(http://msdn.microsoft.com/en-us/library/ttw7t8t6%28v=vs.100%29.aspx)。 – 2013-05-01 01:48:56