这是我做平衡各班平均分时的一个函数,我的存储结构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; } } } } } }
while((avgCj[i] - avg) > 0.5)这个会不会有永远为true的可能?