C# 关于“索引超出了数组界限”报错的问题,各位高手帮帮忙吧。满意再追加50分。

代码如下:
public void creatbtn(int number)
{
string[] tmpnum = new string[number];//声明string类的对象矩阵

Button[] name = new Button[number];//声明button类的对象矩阵
Form3[] fo = new Form3[number];//声明form类的对象矩阵
try
{
for (int i = 0; i < number; i++)//批量声明和定义
{

tmpnum[i] = "button" + i.ToString();

name[i] = new Button();
name[i].Location = new Point(20, 100 + i * 30);//位置自己调整
name[i].Size = new Size(300, 30);//大小同样

this.Controls.Add(name[i]);//窗体上有一个panel1
name[i].Name = tmpnum[i];//给按钮重命名

fo[i] = new Form3();

name[i].Click += (object sender, EventArgs e) =>
{
fo[i].Show();
};
}
}
catch (Exception e1)
{
System.Windows.Forms.MessageBox.Show("The process failed: {0}", e1.ToString());
}

}

结果说:“索引超出了数组界限。”百思不解,如何是好?

string[] tmpnum = new string[number];//声明string类的对象矩阵
Button[] name = new Button[number];//声明button类的对象矩阵
Form3[] fo = new Form3[number];//声明form类的对象矩阵
try
{
for (int i = 0; i < number; i++)//批量声明和定义

你定义的对象矩阵的长度都为number,而for循环中i从0开始,那么后面就应该是number-1啊,
这样写 for (int i = 0; i < number-1; i++)追问

for (int i = 0; i < number; i++)

这句没问题。

追答

是啊,for循环完了按钮才加载玩的

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-09
public static void main(String[] args) throws Exception {
String name,name1;
String ph="" ;
Scanner scan = new Scanner(System.in);
Map<String, String> map = new HashMap<String, String>();
while(!ph.equals("0000")){
System.out.println("输入姓名和电话号码: (当输入的号码为0000时结束)");
name = scan.nextLine();
ph = scan.nextLine();

map.put(name, ph);
}
System.out.println("输入你想查询的的名字:");
第2个回答  2011-10-25
贴点代码出来啊??

这句name[i].Click += (object sender, EventArgs e) =>
换成tmpnum[i] .Click += (object sender, EventArgs e) =>
试试追问

不行啊,虽然button.name赋值为tmpnum[i],但是不能那样用。

追答

你跟踪调试一下看是哪个位置的i超出范围

追问

fo[i].Show();
说是这里越界了,怎么回事啊?

追答

你这样
name[i].Click += (object sender, EventArgs e) =>
{
fo[i].Show();
};
是要等for循环结束了才按钮才加载完,当单击的时候,i 已经是最大的一个值。这问题的好好想下。

追问

能再解释下吗?我似懂非懂啊。问题解决一定兑现承诺。

第3个回答  2011-10-25
你的数组定义了多长, 存了多长,count为多少
又在拿的时候拿了多少。 不能大于数组里面的count数量追问

这些我知道,但是我的for循环貌似没有越界啊?请说具体些。

第4个回答  2011-10-25
就是数组越界了啊,
检查一下你的数组的边界,还有循环的边界追问

哪里越界了啊?请具体指出来,我新手看不出来。

...报错的问题,各位高手帮帮忙吧。满意再追加50分。
string[] tmpnum = new string[number];\/\/声明string类的对象矩阵 Button[] name = new Button[number];\/\/声明button类的对象矩阵 Form3[] fo = new Form3[number];\/\/声明form类的对象矩阵 try { for (int i = 0; i < number; i++)\/\/批量声明和定义 你定义的对象矩阵的长度都为numbe...

C# 中索引超出了数组界限怎么解决
2. 检查索引是否大于或等于数组长度。如果索引超出范围,可以采取以下措施:1. 抛出异常。在C#中,可以使用throw语句抛出异常,告知调用者索引超出范围。2. 调整索引。如果发现索引值过大,可以尝试减小它,使其在有效范围内。3. 使用循环控制。在遍历数组时,可以使用循环条件来防止索引超出范围。4. 使用...

C#中如何解决"索引超出了数组界限"这个异常
"索引超出了数组界限"并不是说索引有多长,而是说这个索引在数组的界限当中找不到,在楼主的代码中,无法保证String[] args 一定有值(即可能不存在args[0]),如果楼主是想在string[] args有值的情况下才输出第一个参数的话,可以改成 class Program { static void Main(string[] args){ string...

在c#中,显示索引超出了数组界限是什么回事啊
就是你要获取的数组元素的位置 超过了数组元素的个数。找不到这个位置下的元素,就报这样的错了

C#高手,请教一下关于"索引超出了数组界限"?
n+1,当n=49时,A[m,50]不就越界了么。改成if((i<>m || j<>n) && Array[i,j]+Array[m,n]==100)就行了

C#执行中出现“索引超出数组界限”的错误。应该如何修改?
索引是从0开始的,而length,与索引最大值的关系应该是 length-1 questionIndex = random.Next(QuizHelper.allQuestionIds.Length);你这句话,就把索引的值,赋成了长度值,超出了索引范围,所以报错了,改成length-1

用c#编程时,出现“索引超出了数组界限。”的问题。
你声明长度为30 ,但是x= j.ToString().ToCharArray() 长度变为x[5] ,x一直没有等于0, i3一直小于30, 造成x超出5了, 所以报错.

c#索引超出数组界限,是怎么回事?
分别为array1[0],array1[1],array1[2],array1[3],array1[4]。当你的程序当中,获取第六个元素即array1[5]的时候,系统就是报错:索引超出了数组。只要记着一点数组的索引下标是从0开始的。全部手写的,希望可以帮到楼主和正在学习C#,的朋友。我自己也在学习.NET当中,愿与君共勉。

C#索引超出了数组界限
static void Main(string[] args) {string str = "helloworld"; for (int i = str.Length; i!=0; i--) { Console.Write(str[i-1]); } Console.Read(); } }

C# 编程 提示索引超出了数组界限 应该怎么写?
此段代码 由于声明了一个args数组,但是args数组里面没有赋予任何值,所以根本不存在arg[0],arg[1]...这里 你只需要给args赋予初始值即可。如-- args=new string[1]{"奥特曼"};string strName;strName=args[0];

相似回答
大家正在搜