按百分比抽题数,有小数累加法, 完美解决半题问题!!!

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class test2 {
	public static void main(String[] args) {
	     List list=new ArrayList();
	     DecimalFormat df = new DecimalFormat("#.###");
	     Map maps2=new HashMap();
	       maps2.put("t", 31);
	       maps2.put("l", "s");
	       list.add(maps2);
	   for(int i=0;i<100;i++){
		   Map maps=new HashMap();
	       maps.put("t", 1);
	       maps.put("l", "z");
	       list.add(maps);
	     }
//	   for(int i=0;i<100;i++){
//		   Map maps=new HashMap();
//	       maps.put("t", 1);
//	       maps.put("l", "s");
//	       list.add(maps);
//	     }
	   Map maps=new HashMap();
       maps.put("t", 50);
       maps.put("l", "s");
       list.add(maps);
       Map maps1=new HashMap();
       maps1.put("t", 19);
       maps1.put("l", "s");
       list.add(maps1);
      
	       int sumti=0;//总题数 
	       int zongju=0;
	       int shenju=0;
	       
	       BigDecimal num=new BigDecimal(0);//没有积累的小数:
	       BigDecimal nums=new BigDecimal(0);//有积累的小数
	     for(int i=0;i<list.size();i++){
	       int ti=0;//每个知识点,积累的小数题数,后的题数 
	       BigDecimal db=new BigDecimal(0);
	       Map map=(Map)list.get(i);
	       BigDecimal dbs=new BigDecimal(Integer.parseInt(map.get("t").toString()));
BigDecimal b=new BigDecimal(81);//可以调整比例
	       System.out.println(map.get("l")+"--"+map.get("t"));
	       
	       if("z".equals(map.get("l"))){
	    	    db=dbs.multiply(b).divide(new BigDecimal(100));
	       }else{
	    	    db=dbs.multiply(new BigDecimal(100).subtract(b)).divide(new BigDecimal(100));
	       }
	      String dbd=db+"";
	      String [] heshu=dbd.split("[.]");
	       
	      if(heshu.length>1){//类别是小数不能混
	    	  dbd= "0."+heshu[1];
	    	  num=new BigDecimal(df.format(new BigDecimal(Double.parseDouble(dbd))));//正常算法得到的小数
	      }else{
	    	  num=new BigDecimal(0);
	      }
	       ti=Integer.parseInt(heshu[0]);//正常算法得到的整数
	       nums=num.add(nums);//正常算法得到的小数之和
	       if(Double.parseDouble(df.format(nums))>=1){//需要加题判断
	          ti+=1;
	          nums=new BigDecimal("0."+(nums+"").split("[.]")[1]);
	       }
	       
	       if("z".equals(map.get("l"))){
	    	    zongju+=ti;
	    	    System.out.println(zongju);
	       }else{
	    	   shenju+=ti;
	    	   System.out.println(shenju);
	       }
	       sumti+=ti;
	       System.out.println("每个知识点的题数:"+ti+"---没有积累的小数:"+num+"--有积累的小数:"+nums);
	     }
	        System.out.println("总题数:"+sumti+"总局题数:"+zongju+"省局题数:"+shenju);
	  }
}


你可能感兴趣的:(按百分比抽题数,有小数累加法, 完美解决半题问题!!!)