一个基于Java的简单分组处理算法

时间:2021-08-10 15:10:41

一个基于Java的简单分组处理算法

问题描述:

在一个已经经过严格分组(从数据库中用 order by 命令读出)的一个数组中,需要将其根据相应的单位不同分组,即将单位相同的统计项放在同一个数组中,从数据库中读出的结构大致如下:

统计项      分组标志

统计项一       A

统计项二       A

统计项三       C

统计项四       E

统计项五       E

…………….

注:为将需要划分的统计项区分开来,在数据库中添加区分标志,即上述“分组标志”

算法描述:

通过循环,首先以第一项为依据比较其中各项,将与其相同的统计项放在一起,直到找到不同的统计项为止,同时标志出目前统计项所处位置(第一组分组完毕);根据前面的统计项标志,从此处开始统计,此处的判断条件为当前项不同于第一项,然后进入第二层判断,此时的判断条件为当前项不同于第一项而且与紧随其后的统计项相同时,进行第二组数组赋值,但是如果当前项既不同于第一项又不同于其后的统计项时,则进入另一层的第二组数组赋值。(第二组数组赋值完毕)以后的分组思路同上。。。

(似乎描述得有点混乱,用流程图效果应该会好一点,汗。。)

此算法的缺点是,只能在已经设定数分组条目的情况下使用,而且随着分组条目的增加,程序的工作量也会相应增大,效率也将随之降低。这种情况下,这种算法极不可取。至于灵活的算法,本人驽钝,尚未想出。

具体的程序如下(分组项数为4):

String unit1="";

String unit2="";

String unit3="";

String unit4="";//提前定义分组数组

int t1=0;

int t2=0;

int t3=0;

int t4=0;//纪录当前统计项的位置

out.println(unitchidepart[0].equals(unitchidepart[1]));

for(int i=0;i<unitchidepart.length;i++){

    if(unitchidepart[0].equals(unitchidepart[i])){//第一个单位分区存储

         if(unit1=="")//以合理的形式重新组织unit1

            unit1=p_StatAttributeCode1[i];

        else unit1+=","+p_StatAttributeCode1[i];

         t1++;

     }

    

     else if(unitchidepart[0]!=unitchidepart[i]&&unitchidepart[t1].equals(unitchidepart[i])&&t1<=unitchidepart.length){//第二个单位分区存储,此处没有进行唯一性处理

         if(unit2=="")//以合理的形式重新组织unit2

             unit2=p_StatAttributeCode1[i];

        else unit2 +=","+p_StatAttributeCode1[i];

         t2++;

            out.println("t2="+t2);

     }

     else if(!unitchidepart[t1].equals(unitchidepart[i])){//第三个单位分区存储

                  if(!unitchidepart[t1].equals(unitchidepart[i])&&unitchidepart[t2].equals(unitchidepart[i])&&t2<=unitchidepart.length){

                          if(unit3=="")//以合理的形式重新组织unit3

                                 unit3 = p_StatAttributeCode1[i];

                          else unit3 += p_StatAttributeCode1[i];

                          t3++;

                          out.println("没有进入唯一性判断");

                   }

                   else if(!unitchidepart[t2].equals(unitchidepart[i])){//第三项唯一,不用和其他统计项组合

                          unit3=unitchidepart[t2];

                          out.println("第三个统计项="+unit3);

                          t3++;

                   }

            }

     else if(unitchidepart[1]!=unitchidepart[i]&&unitchidepart[t3]==unitchidepart[i]&&t3<=unitchidepart.length){//第四个单位分区存储

         unit2=p_StatAttributeCode1[i]+",";

         t4++;

     }

}

                                   20061125日星期六