在绘制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]);
}
}
}
在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个索引,从0
到8
,但看起来您想要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。