在绘制c#的图形中,索引超出了数组的界限

本文关键字:索引 数组 界限 绘制 图形 | 更新日期: 2023-09-27 18:21:31

我正在尝试绘制即时充电与时间之间的关系图,但我得到了以下错误:

索引超出数组的范围

我的代码如下:

namespace WindowsFormsApplication19
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            double max = 24000000, min = 23999999.85;
            double[] q = new double[9];
            int t = 0;
            for (t = 1; t <= 10; t++)
            {
                q[t] = (24 * Math.Pow(10, 6)) * Math.Exp(-t / (2000 * Math.Pow(10, 6)));
                chart1.Series[0].Points.AddXY(t, q[t]);
            }
            chart1.ChartAreas[0].AxisY.Maximum = max;
            chart1.ChartAreas[0].AxisY.Minimum = min;
            chart1.Series[0].ChartType = SeriesChartType.FastLine;
            chart1.Series[0].Color = Color.Red;
        }
    }
}

我试过了,但仍然有同样的问题:

private void button1_Click(object sender, EventArgs e) {
    double[] q = new double[9];
    int t = 0;
    for (int i = 0; i <= 9; i++)
    {
        for (t = 1; t <= 10; i++)
        {
            q[i] = (24 * Math.Pow(10, 6)) * Math.Exp(-t / (2000 * Math.Pow(10, 6)));
            chart1.Series[0].Points.AddXY(t, q[i]);
        }
    }
}

在绘制c#的图形中,索引超出了数组的界限

在for循环中,从0到<q.长度

通过这种方式,您可以更改数组的长度,for循环仍然有效。

        double[] q = new double[9];
        for (int t = 0; t < q.Length; t++)
        {
            q[t] = (24 * Math.Pow(10, 6)) * Math.Exp(-t / (2000 * Math.Pow(10, 6))); 
            chart1.Series[0].Points.AddXY(t, q[t]);               
        }

索引越界意味着您的代码试图写入的索引高于最高索引。

你的代码中有两个问题导致了这种情况——你需要先解决这两个问题,然后它才能工作。

1.修复q

在您的代码中,有一个数组q,它有9个索引,从08,但看起来您想要10:new double[10]

2.修复环路

在for look中,您从1到10循环,但数组以索引0开始(您有10个索引,从0到9)。您需要t以0开头,而不是以1开头。

namespace WindowsFormsApplication19
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            double max = 24000000, min = 23999999.85;
            double[] q = new double[10]; // Fix q: length of 10
            for (int i = 0; i < q.Length; i++) // Fix loop: start at 0
            {
                int t = i + 1; // Fix loop: t and i need to have different values
                q[i] = (24 * Math.Pow(10, 6)) * Math.Exp(-t / (2000 * Math.Pow(10, 6)));
                chart1.Series[0].Points.AddXY(t, q[i]);
            }
            chart1.ChartAreas[0].AxisY.Maximum = max;
            chart1.ChartAreas[0].AxisY.Minimum = min;
            chart1.Series[0].ChartType = SeriesChartType.FastLine;
            chart1.Series[0].Color = Color.Red;
        }
    }
}

您的数组可以包含10个元素,因为:

double[] q = new double[9];

当你的for循环达到10;这意味着你想要达到q[10],所以它将导致Index超出数组错误的范围。

循环索引的增量不应该超过9。