for (int i = 0; i < 24; i++)
            {
if (WU[i] + P[i] - EU[i] - R[i] <= WUM)
                {
                    WU[i + 1] = WU[i] + P[i] - EU[i] - R[i];
                    WL[i + 1] = WL[i] - EL[i];
                    WD[i + 1] = WD[i] - ED[i];
                }
}运行到WU[i+1]的时候就跳出 说超出了数组界限。c语言里面就不会问题。这怎么解决啊?

解决方案 »

  1.   

    你的数组总共才24吧
    你运行到i=23的时候,i+1=24了,肯定超出界限了啊
    你应该判断i是否等于23,如果等于23则做另外的处理
      

  2.   

    那就是超出了呗,WU长度要>=25才不会超
      

  3.   

    对所有数组的索引都进行判断就好了
    if((i+1)<=WU.Length)
    WU[i + 1] = WU[i] + P[i] - EU[i] - R[i];所有的数组都像上面那样进行判断
      

  4.   

    for (int i = 0; i < WU.Length-1; i++)
      

  5.   

    当你的i==23的时候 ,i+1是24,超出界限了。
    for (int i = 0; i < 23; i++)
      

  6.   


    for (int i = 0; i < wu[i].lenght; i++)
     
      

  7.   

    我把循环做到24,for循环里面又对i==23的情况做了单独处理,但是最后结果输出只有23行了,这是怎么回事啊?
      

  8.   

    你们推测的对,我改了,在i==23的时候break,
    但是输出结果变成23行了,这怎么办啊?
      

  9.   

    代码太长了,就不贴上来了。少最后一行啊。我觉得还是for循环那里定义的问题。不是从0开始么,那到23应该就是24行才对。但最后输出来就到23行就没有下面的了。
      

  10.   


      for (int i = 0; i < 24; i++)
                {
    ……
    if (i < 23)
                    {
                        if (WU[i] + P[i] - EU[i] - R[i] <= WUM)
                        {
                            WU[i + 1] = WU[i] + P[i] - EU[i] - R[i];
                            WL[i + 1] = WL[i] - EL[i];
                            WD[i + 1] = WD[i] - ED[i];
                        }
                        else
                        {……}
                     }
    else
                        break;
    ……
    StreamWriter sw = new StreamWriter(pathout, true);
                    sw.WriteLine(WU[i])
                    sw.Close();            }这是部分代码 关于for循环的 大家看看怎么最后一行没了呢?
      

  11.   

      for (int i = 0; i < 24; i++)
                {
    ……
    StreamWriter sw = new StreamWriter(pathout, true);
                    sw.WriteLine(WU[i])
                    sw.Close();
    if (i < 23)
                    {
                        if (WU[i] + P[i] - EU[i] - R[i] <= WUM)
                        {
                            WU[i + 1] = WU[i] + P[i] - EU[i] - R[i];
                            WL[i + 1] = WL[i] - EL[i];
                            WD[i + 1] = WD[i] - ED[i];
                        }
                        else
                        {……}
                     }
    else
                        break;
    ……
                }写的部分直接放在If的前面就可以了,因为if里面是对WU[i + 1]的值进行修改的,对WU[i]没影响,所以直接将WU[i]写入文本就可以了。
      

  12.   

    已经解决啦~原来是因为break,直接跳出循环了,最后一行就没有计算的缘故。把break去掉就好了。谢谢各位了~