关于数组出界问题?

Zoe105 2009-04-16 01:11:10
d是个6×6的二维数组,textboxs[n]含6个元素的一维数组,n=6
for (int i = 0; i< 6; i++)
{
for (int j = 0; j < 6; j++)
{
s1 = d[i, j];
p1 = s1.Split(',');
if (p1[4] != "0")
{

textboxs[n].Text = p1[2];


n++;
if (n > 6)
continue;
}
为什么n会运行到6呢?还有运行到n=6时说出界了呢?
...全文
180 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zoe105 2009-04-17
  • 打赏
  • 举报
回复
就是之前声明了下INT N=0;
[Quote=引用 20 楼 LemIST 的回复:]


C# code
for (int i2 = 0; i2 < 6 &&n <6; i++)
{
for (int j = 0; j < 6 && n < 6; j++)
{
s1 = data[i2, j];
p1 = s1.Split(',');
if (p1[4] != "0")//当step的时间不为零
{
//step[n] = p1[2];

[/Quote]
LemIST 2009-04-16
  • 打赏
  • 举报
回复


for (int i2 = 0; i2 < 6 &&n <6; i++)
{
for (int j = 0; j < 6 && n < 6; j++)
{
s1 = data[i2, j];
p1 = s1.Split(',');
if (p1[4] != "0")//当step的时间不为零
{
//step[n] = p1[2];
stepbts[n].Text = p1[2];
temps[n].Text = p1[3];
times[n].Text = p1[4];
n++;

}


for (int i2 = 0; i2 < 6 &&n <6; i++)
==> for (int i2 = 0; i2 < 6 &&n <6; i2++)

PS: n在哪里申明并初始化的?
Zoe105 2009-04-16
  • 打赏
  • 举报
回复


data = new string[,] {{"stage1,1,step1,95.10,60","stage1,1,step2,94.0,11","stage1,0,step3,0,0","stage1,0,step4,0,0","stage1,0,step5,0,0","stage1,0,step6,0,0"},
{"stage2,35,step1,50.0,15","stage2,35,step2,55.0,15","stage2,35,step3,72.0,30","stage2,35,step4,11,30","stage2,0,step5,0,0","stage2,0,step6,0,0"},
{"stage3,1,step1,72.0,420","stage3,1,step2,4.0,1","stage3,0,step3,0,0","stage3,0,step4,0,0","stage3,0,step5,0,0","stage3,0,step6,0,0"},
{"stage4,2,step1,10,4","stage4,2,step2,0,5","stage4,0,step3,0,0","stage4,0,step4,0,0","stge4,0,step5,0,0","stage4,0,step6,0,0"},
{"stage5,1,step1,10,11","stage5,1,step2,20,52","stage5,1,step3,0,0","stage5,1,step4,0,0","stage5,0,step5,0,0","stage5,0,step6,0,0"},
{"stage6,0,step1,0,0","stage6,0,step2,0,0","stage6,0,step3,0,0","stage6,0,step4,0,0","stage6,0,step5,0,0","stage6,0,step6,0,0"}
};
stages = new Label[] { stage1, stage2, stage3, stage4, stage5, stage6 };
cyclebts = new Button[] { cyclebt1, cyclebt2, cyclebt3, cyclebt4, cyclebt5, cyclebt6 };
temps = new Label[] { temp1, temp2, temp3, temp4, temp5, temp6 };
times = new Label[] { time1, time2, time3, time4, time5, time6 };
stepbts = new Button[] { stepbt1, stepbt2, stepbt3, stepbt4, stepbt5, stepbt6 };
for (int i2 = 0; i2 < 6 &&n<6; i++)
{
for (int j = 0; j < 6 && n < 6; j++)
{
s1 = data[i2, j];
p1 = s1.Split(',');
if (p1[4] != "0")//当step的时间不为零
{
//step[n] = p1[2];
stepbts[n].Text = p1[2];
temps[n].Text = p1[3];
times[n].Text = p1[4];
n++;

}
其实最好下标都变成I,J之类的,这样我就能再进一步操作了,呵呵
ryou791017 2009-04-16
  • 打赏
  • 举报
回复
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
if (n > 6)
break;

s1 = d[i, j];
p1 = s1.Split(',');
if (p1[4] != "0")
{

textboxs[n].Text = p1[2];


n++;

}
}
Zoe105 2009-04-16
  • 打赏
  • 举报
回复
主要是符合条件的数比较多,所以想取前6个数字放文本框里面,数字够了就跳出循环
Zoe105 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 LemIST 的回复:]
引用 12 楼 yuanlan105 的回复:
引用 11 楼 LemIST 的回复:
这样还有问题么?

C# code
int n = 0;
for (int i = 0; i < 6 && n < 6; i++)
{
for (int j = 0; j < 6 && n < 6; j++)
{
s1 = d[i, j];
p1 = s1.Split(',');
if (p1[4] !…
[/Quote]
我的d[i,j]是不重复的,我检查过了
wwq0123 2009-04-16
  • 打赏
  • 举报
回复
textboxs[6]的索引应该是0-5
就是textboxs[0]~textboxs[5]

把代码都贴出来看看
LemIST 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yuanlan105 的回复:]
引用 11 楼 LemIST 的回复:
这样还有问题么?

C# code
int n = 0;
for (int i = 0; i < 6 && n < 6; i++)
{
for (int j = 0; j < 6 && n < 6; j++)
{
s1 = d[i, j];
p1 = s1.Split(',');
if (p1[4] != "0")

[/Quote]

检查下你的d[i, j]里面的内容,是不是循环重复的,调试下。
_see_you_again_ 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 a315441616 的回复:]
应该是continue的原因..你想想..当N>6后..你还让他继续执行

然而continue是作用于if语句中.而不是for语句中.你想想就知道了.当n=6

if (p1[4] != "0")
{

textboxs[6].Text = p1[2];


n++;
if (n > 5)
continue;
}

不是continue的原因,continue只针对当前循环语句,跟if没有任何关系,当遇到continue时代码将跳到j++并继续执行,这贴遇到的问题如下:
for (int i = 0; i < 6; i++)
{
int n=0;//必须在此重新归0
for (int j = 0; j < 6; j++)
{
s1 = d[i, j];
p1 = s1.Split(',');
if (p1[4] != "0")
{
textboxs[n].Text = p1[2];
n++;//n++处在双重循环中一直累加,n没有在下次循环中设为0;如果p1[4]条件一直为真n最大可到36,但是在遇到6时已经报错了.
if (n > 6)//这两句代码没有任何意义.
continue;//
}
[/Quote]
Zoe105 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 LemIST 的回复:]
这样还有问题么?

C# code
int n = 0;
for (int i = 0; i < 6 && n < 6; i++)
{
for (int j = 0; j < 6 && n < 6; j++)
{
s1 = d[i, j];
p1 = s1.Split(',');
if (p1[4] != "0")
{ …
[/Quote]
效果还是一样。。。。
LemIST 2009-04-16
  • 打赏
  • 举报
回复
这样还有问题么?

int n = 0;
for (int i = 0; i < 6 && n < 6; i++)
{
for (int j = 0; j < 6 && n < 6; j++)
{
s1 = d[i, j];
p1 = s1.Split(',');
if (p1[4] != "0")
{
textboxs[n++].Text = p1[2];
}
}
}


Zoe105 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 LemIST 的回复:]
C# codefor (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
s1 = d[i, j];
p1 = s1.Split(',');
if (p1[4] != "0")
{

textboxs[n].Text = p1[2];

[/Quote]
但是6个出来的是n=0,n=1的值,来回三次一样的值。。我想要的是6个不一样的值
LemIST 2009-04-16
  • 打赏
  • 举报
回复
for (int i = 0; i < 6; i++) 
{
for (int j = 0; j < 6; j++)
{
s1 = d[i, j];
p1 = s1.Split(',');
if (p1[4] != "0")
{

textboxs[n].Text = p1[2];


n++;
if (n >= 6)
break; //跳出内层循环
}
}
if(n >= 6)
break;//跳出外层循环
}
LemIST 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yuanlan105 的回复:]
引用 5 楼 LemIST 的回复:
if (n > 6)
continue;
改为break;

不行的,我之前就那样写的。。。。郁闷
[/Quote]
if (n >= 6)
Zoe105 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 LemIST 的回复:]
if (n > 6)
continue;
改为break;
[/Quote]
不行的,我之前就那样写的。。。。郁闷
挨踢小斯 2009-04-16
  • 打赏
  • 举报
回复
应该是continue的原因..你想想..当N>6后..你还让他继续执行

然而continue是作用于if语句中.而不是for语句中.你想想就知道了.当n=6

if (p1[4] != "0")
{

textboxs[6].Text = p1[2];


n++;
if (n > 5)
continue;
}


超界了...呵...不知道是不是分析正确哦.
LemIST 2009-04-16
  • 打赏
  • 举报
回复
if (n > 6)
continue;
改为break;
Zoe105 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhangjie_it 的回复:]
textboxs[n]含6个元素的一维数组,n=6
不是只有0-5吗?
[/Quote]
我也不知道呢,我改成if(n==5),也是错的。。
Zoe105 2009-04-16
  • 打赏
  • 举报
回复
i<5,j<5的话不是遍历不了了6×6的数组了?
zzxap 2009-04-16
  • 打赏
  • 举报
回复
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
s1 = d[i, j];
p1 = s1.Split(',');
if (p1[4] != "0")
{

textboxs[n].Text = p1[2];


n++;
if (n > 5)
continue;
}
加载更多回复(1)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧