xiaobeihfut 2015-11-17 04:50 采纳率: 0%
浏览 1492

大家帮我看看下面的代码,运行时提示我索引超出界限

static void Main()
{

    List<List<int>> b = new List<List<int>>();
    List<List<int>> GJ = new List<List<int>>();
    int[] t = new int[] { 8, 4, 5, 7, 2, 4, 2, 1, 9, 3 };
    int[] s = new int[] { 6, 7, 9, 2, 8, 3, 4, 4, 5, 1 };
    int[] index = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int[] t_copy=new int []{8, 4, 5, 7, 2, 4, 2, 1, 9, 3 };
    int i, j, k;
    int[] P_s = new int[10];
    int[] P_t = new int[10];
    for (i = 0; i < 8; i++)
    {
        for (j = i + 1; j < 9; j++)
        {
            if (t_copy[i] < t_copy[j])
            {  
                k = index[i];
                index[i] = index[j];
                index[j] = k;
            }
        }
    }

    for (j = 0; j < 10; j++)                //分批
    {
        k=0;
        while (k < 10)
        {
            b.Add(new List<int>());
            GJ.Add(new List<int>()); 
            if (s[index[j]] + P_s[k] <= 10)
            {
                b[k].Add(index[j]);
                GJ[k].Add(t[index[j]]);
                P_s[k] = P_s[k] + s[index[j]];
                k++;
                break;
            }
        }
    }
    for (k = 0; k < b.Count ; k++)              //求出每个批次的加工时间(最大值)
    {
        P_t[k] =GJ[k][0] ;
        for (j = 0; j < b[k].Count ; j++)
        {
            if (GJ[k][j] > P_t[k])
                P_t[k] = GJ[k][j];
        }
    }


思路是根据t从大到小排列后得到的索引号index,用index对s进行分批。批次之和不超
过10,否则新开辟一个批次。但是批次数事先不知道,批次数里的工件号也事先不知道,该怎么修改代码呢?

  • 写回答

1条回答 默认 最新

  • 把分全给哥 2015-11-17 05:27
    关注

    人为何要难为自己呢

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图的问题
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名