統計函數主要實現的是較為復雜的統計函數如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}));
}
}