Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果元素数是一个变量,如何显示数组元素_C# - Fatal编程技术网

C# 如果元素数是一个变量,如何显示数组元素

C# 如果元素数是一个变量,如何显示数组元素,c#,C#,我正在用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 < n

我正在用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];

    }
int-numOfPackages//用于获取用户输入
私有无效按钮3\u单击(对象发送者,事件参数e)
{
int[]重量=新的int[numOfPackages];
对于(int i=0;i
当我试图显示元素时,它会给我IndexOutfrange异常。 那么,如何显示该数组的元素呢

提前谢谢。

这一行

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
如果权重不同,则它们应该来自不同的权重框,或者单个
权重框中的字符串应该以产生多个数字的方式进行处理(例如,使用
string.Split
)。

此行

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

如果权重不同,它们应该来自不同的权重框,或者单个
权重框中的字符串应该以产生多个数字的方式进行处理(例如,使用
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];
}
这与上面相同,但您不必担心索引问题


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

您在这里遇到了多个问题。首先是:

    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];
}
这与上面相同,但您不必担心索引问题


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

也许您想要更像

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

}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
btnAdd.Enabled=false;
}
int[]重量;
室内设计;
国际货币基金组织;
私有void btnReset_单击(对象发送者,事件参数e)
{
if(int.TryParse(numEntriesBox.Text,out numOfPackages))
{
重量=新整数[numOfPackages];
entriesMade=0;
btnReset.Enabled=false;
btnAdd.Enabled=true;
totalCostLabel.Text=“”;
}
其他的
{
MessageBox.Show(“无效条目数”);
}
}
私有void btnAdd_单击(对象发送者,事件参数e)
{
int值;
if(int.TryParse(weightBox.Text,out值))
{
重量[entriesMade]=数值;
weightBox.Clear();
totalCostLabel.Text=“”;
int-total=0;

对于(int i=0;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");
        }
    }

}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
btnAdd.Enabled=false;
}
int[]重量;
室内设计;
国际货币基金组织;
私有void btnReset_单击(对象发送者,事件参数e)
{
if(int.TryParse(numEntriesBox.Text,out numOfPackages))
{
重量=新整数[numOfPackages];
entriesMade=0;
btnReset.Enabled=false;
btnAdd.Enabled=true;
totalCostLabel.Text=“”;
}
其他的
{
MessageBox.Show(“无效条目数”);
}
}
私有void btnAdd_单击(对象发送者,事件参数e)
{
int值;
if(int.TryParse(weightBox.Text,out值))
{
重量[entriesMade]=数值;
weightBox.Clear();
totalCostLabel.Text=“”;
int-total=0;

对于(int i=0;i哦,我没有解释numOfPackages是用户必须输入的数字。但是我增加了i,为什么它试图将输入存储在同一个索引中?@RomanGusan您应该通过编辑问题来解释它。我希望
numOfPackages
来自另一个文本框,或者可能来自不同的UI元素,right?哦,我没有解释numOfPackages是用户必须输入的数字。但是我增加了I,为什么它试图将输入存储在同一个索引中?@RomanGusan您应该通过编辑问题来解释。我希望
numOfPackages
来自另一个文本框,或者可能来自不同的UI元素,对吗?请访问至少读一读。请至少读一读。