JAVA實現EXCEL公式專題(七)——統計函數
阿新 • • 發佈:2017-07-30
length trace trac 復雜 manage 排列 public ram script
統計函數主要實現的是較為復雜的統計函數如countif、sumif、frequency,也是,直接上代碼
/** * 項目名稱: * 文件說明: * 主要特點:文件說明:EXCEL函數類型:統計函數 * 簡單的函數如sum,average等等就不實現了 * 版本:1.0 * 制作人:劉晨曦 * 創建時間:2013-12-3 **/ package EXCEL; import games.MathTools; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; /** * @author lcx * */ public class CountFunctions { /** * 統計滿足條件的個數 * @param range * @param criteria * @return */ public static int sumif(int[][] range,String criteria) { ScriptEngineManager man=new ScriptEngineManager(); ScriptEngine engine=man.getEngineByName("javascript"); int sum=0; for(int i=0;i<range.length;i++) for(int j=0;j<range[0].length;j++) { try { Boolean b=(Boolean) engine.eval(range[i][j]+criteria); if(b) sum+=range[i][j]; } catch (ScriptException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return sum; } /** * 統計滿足條件的個數 * @param range * @param criteria * @return */ public static int countif(int[][] range,String criteria) { ScriptEngineManager man=new ScriptEngineManager(); ScriptEngine engine=man.getEngineByName("javascript"); int count=0; for(int i=0;i<range.length;i++) for(int j=0;j<range[0].length;j++) { try { Boolean b=(Boolean) engine.eval(range[i][j]+criteria); if(b) count++; } catch (ScriptException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return count; } public static void sort() { System.out.println("給array和tags排序"); } /** * 為簡化處理,在這裏邊需保證輸入的是升序排列的數組 * @param array * @param tags * @return */ public static int[] frequency(int [] array,int[] tags) { sort();//排序,在這裏就不實現了 if(array==null||tags==null||array.length==0||array.length==0) throw new IllegalArgumentException("數組為空"); int[] res=new int[tags.length+1]; int count=0; for(int i=0;i<array.length;i++) { if(count>=tags.length) break; if(array[i]<=tags[count]) res[count]+=1; else { i--; count++; } } //剩余的 int sum=0; for(int i=0;i<res.length-1;i++) sum+=res[i]; res[res.length-1]=array.length-sum; return res; } public static void main(String[] args) { /*******************測試數組相關*****************************/ int [][]a={{1,2},{3,4},{5,6}}; // countif(a,"<=2"); // System.out.println(rank(3,a,true)); System.out.println(sumif(a,"<=2")); int[] b={15,25,35,45,55,65,75,85,95}; MathTools.printArray(frequency(b,new int[]{10,90})); } }
JAVA實現EXCEL公式專題(七)——統計函數