评分+排序代码

 public String add() throws Exception{
  Thread.sleep(2000);
  HttpServletRequest request = ServletActionContext.getRequest();
  
//  起始字母
  char arr = 'A';
//  页面传值集合
  Map<String,String> mparam = new HashMap<String,String>();
//  单条计算集合
  Map<String,Double> result = new HashMap<String,Double>();
//  单项分集合
  Map<String,Double> rank = new HashMap<String,Double>();
//  单项排名分集合
  Map<String,String> resultrank = new HashMap<String,String>();
//  总分
  double resultsum = 0;
//  遍历获取页面传值
  while( null != request.getParameter(String.valueOf(arr)+1)){
//   单项分
   double sum = 0;
//   单项遍历
   for(int i = 1; i < 10; i++){
//    如果单项无更多条则跳出
    if(null == request.getParameter(String.valueOf(arr)+i)){
//     跳出前将单项分保存
     rank.put(String.valueOf(arr), sum);
//     总分为单项分之和
     resultsum += sum;
     break;
    }
//    保存页面传值
    mparam.put(String.valueOf(arr)+i, request.getParameter(String.valueOf(arr)+i));
//    拆分传值字符
    String[] str = cutver(request.getParameter(String.valueOf(arr)+i));
//    累计单项分
    sum += Double.parseDouble(str[1])*Double.parseDouble(str[2]);
//    计算并保存单条分
    result.put(String.valueOf(arr)+i, Double.parseDouble(str[1])*Double.parseDouble(str[2]));
   }
//   遍历下一个字母
   arr++;
  }

  if(flag){

//   遍历单项分集合
         Iterator<String> it = rank.keySet().iterator();
//       重置最高分
         double outdata = 999999999;
//       重置最高分字符
         String outkey = null;
//       重置排名
         int sum = 1;
//         遍历单项集合
         while(it.hasNext()){
//          当前值
          String key = it.next();
//          如果最高分为初始值则赋值
          if(outdata == 999999999){
           outdata = rank.get(key);
           outkey = key;
          }else{
//           判断值大小,更新最高分
           if(outdata<rank.get(key)){
            outdata = rank.get(key);
            outkey = key;
           }
          }
//          如果遍历结束
             if(!it.hasNext()){
//              将最高分载入集合
              resultrank.put(outkey, rank.get(outkey)+"/"+sum++);
//              将最高分从源集合移除
              rank.remove(outkey);
//              重置最高分
                 outdata = 999999999;
                 outkey = null;
//               如果移除后集合不为空,则重置集合继续遍历
              if(rank.size()>0)
              it = rank.keySet().iterator();
             }
         }
   
   System.err.println(mparam);
   System.err.println(result);
   System.err.println(rank);
   System.err.println(resultrank);
   
   message.append("操作成功");
   dwzMsg.setStatusCode(200);
   dwzMsg.setCallbackType("forward");
   dwzMsg.setForwardUrl(ServletActionContext.getRequest().getContextPath()
     + "/control/enterprise/manage_addSuccessUI.do?result="+result);   
  }else{
   dwzMsg.setStatusCode(300);
  }
  dwzMsg.setMessage(message.toString());
  WebUtil.addWarn(dwzMsg);
  logger.info(dwzMsg.toString());
  return "controlResult";
  
 }

 //转换分数
 private String transform(double db){
  if(db>=90)
  return "AAA";
  else if(db>=80)
  return "AA";
  else if(db>=70)
  return "A";
  else if(db>=60)
  return "BBB";
  else if(db>=50)
  return "BB";
  else if(db>=40)
  return "B";
  else if(db>=30)
  return "CCC";
  else if(db>=20)
  return "CC";
  else
  return "C";
 }

 

// 单项分排序
 public Map<String,String> sorting(Map<String,Double> rank){
  Map<String,String> resultrank = new HashMap<String,String>();
//  遍历单项分集合
        Iterator<String> it = rank.keySet().iterator();
//      重置最高分
        double outdata = 999999999;
//      重置最高分字符
        String outkey = null;
//      重置排名
        int sum = 1;
//        遍历单项集合
        while(it.hasNext()){
//         当前值
         String key = it.next();
//         如果最高分为初始值则赋值
         if(outdata == 999999999){
          outdata = rank.get(key);
          outkey = key;
         }else{
//          判断值大小,更新最高分
          if(outdata<rank.get(key)){
           outdata = rank.get(key);
           outkey = key;
          }
         }
//         如果遍历结束
            if(!it.hasNext()){
//             将最高分载入集合
             resultrank.put(outkey, rank.get(outkey)+"/"+sum++);
//             将最高分从源集合移除
             rank.remove(outkey);
//             重置最高分
                outdata = 999999999;
                outkey = null;
//              如果移除后集合不为空,则重置集合继续遍历
             if(rank.size()>0)
             it = rank.keySet().iterator();
            }
        }
  return resultrank;
 }
 


// 单条分排序
 public LinkedList<String> sorting2(Map<String,Double> rank){
//  单项排名
  LinkedList<String> al  = new LinkedList<String>();
//  遍历单项分集合
        Iterator<String> it = rank.keySet().iterator();
//      重置最高分
        double outdata = 999999999;
//      重置最高分字符
        String outkey = null;
//      重置排名
        int sum = 0;
//        遍历单项集合
        while(it.hasNext()){
//         当前值
         String key = it.next();
//         如果最高分为初始值则赋值
         if(outdata == 999999999){
          outdata = rank.get(key);
          outkey = key;
         }else{
//          判断值大小,更新最高分
          if(outdata<rank.get(key)){
           outdata = rank.get(key);
           outkey = key;
          }
         }
//         如果遍历结束
            if(!it.hasNext()){
//             将最高分载入集合
             al.add(sum++,outkey);
//             将最高分从源集合移除
             rank.remove(outkey);
//             重置最高分
                outdata = 999999999;
                outkey = null;
//              如果移除后集合不为空,则重置集合继续遍历
             if(rank.size()>0)
             it = rank.keySet().iterator();
            }
        }
  return al;
 }
 


// 获取排行0为前三位,其他为后三位,字符中以,隔开
 public String getrank(LinkedList<String> al,int i){
//  前三位
  if(al.size()<1)return "Null";
  
  if(i == 0){
   String first = al.pollFirst();
   if(al.size()<1)return first;
   String second = al.pollFirst();
   if(al.size()<1)return first+second;
   return first+","+second+","+al.pollFirst();
  }
//  后三位
  else{
   String first = al.pollLast();
   if(al.size()<1)return first;
   String second = al.pollLast();
   if(al.size()<1)return first+second;
   return first+","+second+","+al.pollLast();
  }
 }

 

posted @ 2013-09-05 10:21  传说中那只猫  阅读(279)  评论(0编辑  收藏  举报