如何显示数组元素,如果元素的数量是一个变量
本文关键字:变量 一个 如果 何显示 显示 数组元素 元素 | 更新日期: 2023-09-27 18:11:31
我在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];
}
当我尝试显示元素时,它会给我一个indexoutorange异常。那么,如何显示这个数组的元素呢?
这一行
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
)
你有很多问题。第一个是:
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添加任何内容,您只是替换了该值。这将把所有的weight值作为一个值附加在一起。
另一种方法是使用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");
}
}
}