首页 新闻 会员 周边 捐助

list的元素互换问题,

0
[已解决问题] 解决于 2014-07-12 17:44

这是我做平衡各班平均分时的一个函数,我的存储结构List<List<StudengDetail>>,最外层List:stuClass是每个班的信息,List<StudengDetail>:stu1和stu2为单个班的学生信息。我的思路是先确定全年级的平均分,通过getindex算出所需要交换班级在stuClass中的下标,如果班级平均分比总平均分avg>0.5分,那么按位判断stu1和stu2 ,如果 stu1[j]>stu2[k]则交换,重新计算stu1平均分与avg的差,如果还>0.5分,就继续进行交换;stu1 平均分<avg0.5分时也同理;当stu1与avg的分差在|0.5|的绝对值之间时,就不进行交换。大家看我写的程序对不对,我总感觉有问题;

            /*
            *学生互换,本质上是求N个数组的数据平衡问题,使每个数组的平均分于平均分差值小于0.5
            */
            for (int i = 0; i < stuClass.Count; i++)
            {
                List<StudentDetail> stu1 = stuClass[i];
                int index = getindex(i, avg,avgCj);//要交换的b[x]中的索引数
                //如果avgCj[i]-avg<+_0.5的时候,index返回值为99,不进行交换;否则返回avgCj[i]中的索引值,stuClass[i]与stuClass[index]的值进行交换
                if (index != 99)
                {
                    List<StudentDetail> stu2 = stuClass[index];
                    StudentDetail temp =new StudentDetail();
                    for(int j =0;j<stu1.Count;j++){
                        for (int k = 0; k < stu2.Count;k++ )
                        {
                            while((avgCj[i] - avg) > 0.5)
                            {
                                if (stu1[j].StudengCj > stu2[k].StudengCj) {
                                    temp = stu1[j];
                                    stu1[j]=stu2[k];
                                    stu2[k] = temp;
                                    sumCj[i] += (stu2[k].StudengCj-stu1[i].StudengCj);
                                    avgCj[i] = sumCj[i] / stu1.Count;
                                }
                            }
                            while ((avgCj[i] - avg) <- 0.5)
                            {
                                if (stu1[j].StudengCj < stu2[k].StudengCj)
                                {
                                    temp = stu1[j];
                                    stu1[j] = stu2[k];
                                    stu2[k] = temp;
                                    sumCj[i] += (stu2[k].StudengCj - stu1[i].StudengCj);
                                    avgCj[i] = sumCj[i] / stu1.Count;
                                }
                            }
                        }
                    }
                }
            }
飞翔的球迷的主页 飞翔的球迷 | 初学一级 | 园豆:153
提问于:2014-07-10 11:28
< >
分享
最佳答案
0

while((avgCj[i] - avg) > 0.5)这个会不会有永远为true的可能?

奖励园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2014-07-10 11:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册