今天用C#编了了一个小程序,结果老是提示索引超出了数组界限,求高手帮忙啊!
源代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSys...
源代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Mainform : Form
{
public Mainform()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
double [,]T=new double[201,90001];
double x=0.0005,t=0.01,a=5.55/1000000,f=0.222;
double h=174.0,k=34.8;
double m=h*x/k;
for(int i=1;i<=200;i++)
T[i,0]=20;
for (int n=0;n<=90000;n++)
{
for(int j=2;j<=199;j++)
{
T[j,n+1]=f*T[j+1,n]+f*T[j-1,n]+(1-2*f)*T[j,n];
T[1,n+1]=T[2,n+1];
}
T[200,n+1]=1/(m+1)*(T[199,n+1]+1000*m);
}
for(int b=1;b<=200;b++)
{
Console.WriteLine(T[b,90000]);
}
}
}
}
T[j,n+1]=f*T[j+1,n]+f*T[j-1,n]+(1-2*f)*T[j,n]; 这句提示“索引超出了数组界限”,急死我了啊,求高手指点! 展开
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Mainform : Form
{
public Mainform()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
double [,]T=new double[201,90001];
double x=0.0005,t=0.01,a=5.55/1000000,f=0.222;
double h=174.0,k=34.8;
double m=h*x/k;
for(int i=1;i<=200;i++)
T[i,0]=20;
for (int n=0;n<=90000;n++)
{
for(int j=2;j<=199;j++)
{
T[j,n+1]=f*T[j+1,n]+f*T[j-1,n]+(1-2*f)*T[j,n];
T[1,n+1]=T[2,n+1];
}
T[200,n+1]=1/(m+1)*(T[199,n+1]+1000*m);
}
for(int b=1;b<=200;b++)
{
Console.WriteLine(T[b,90000]);
}
}
}
}
T[j,n+1]=f*T[j+1,n]+f*T[j-1,n]+(1-2*f)*T[j,n]; 这句提示“索引超出了数组界限”,急死我了啊,求高手指点! 展开
3个回答
展开全部
一楼回答是正确的
你的n最大是90000,而你的T[j,n+1]=f*T[j+1,n]+f*T[j-1,n]+(1-2*f)*T[j,n]; 中出现了n+1
也就是,你的代码出现了T[j,90001]
90001是二维数组第二维的个数,但数组标号都是从0开始的,所以最大只能出现T[j,90000]
解决的办法之一是将for (int n=0;n<=90000;n++)改为for (int n=0;n<90000;n++)
你的n最大是90000,而你的T[j,n+1]=f*T[j+1,n]+f*T[j-1,n]+(1-2*f)*T[j,n]; 中出现了n+1
也就是,你的代码出现了T[j,90001]
90001是二维数组第二维的个数,但数组标号都是从0开始的,所以最大只能出现T[j,90000]
解决的办法之一是将for (int n=0;n<=90000;n++)改为for (int n=0;n<90000;n++)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
所有数组的下标都是从0开始的,所以double [,]T=new double[201,90001];
T的下标最大是T[200,90000]
你这里循环到最后的时候,T的下标是201,90001,所以超出了范围
T的下标最大是T[200,90000]
你这里循环到最后的时候,T的下标是201,90001,所以超出了范围
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for循环,从i=0开始,n也是从0开始。理由就是楼上说的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询