问题描述
我正在编写一个程序来计算数据的 z-score,当我单独测试每个函数时,它们可以正常工作
但是,当我尝试测试整个程序时,它也给了我 Exception in thread "main" java.lang.ArithmeticException: Division undefined
,z-scored 数据的结果不正确,我需要解决这些问题
这是代码:
public class Test {
public static List<BigDecimal> dataToBenormalized = new ArrayList<>();
public static void main(String[] args) throws FileNotFoundException,IOException,CsvValidationException {
ArrayList<BigDecimal> dataToBenormalized = new ArrayList<BigDecimal>();
ArrayList<BigDecimal> dataAfternormalization = new ArrayList<BigDecimal>();
dataToBenormalized.add(new BigDecimal("66"));
dataToBenormalized.add(new BigDecimal("8"));
dataToBenormalized.add(new BigDecimal("89"));
BigDecimal mean = mean();
BigDecimal standardDeviation = standardDeviation();
//Z-score:
BigDecimal divide = new BigDecimal("1");
int i;
for (i = 0; i < dataToBenormalized.size(); i++) {
BigDecimal sub = (dataToBenormalized.get(i).subtract(mean));
divide = sub.divide(standardDeviation);
divide.setScale(2).setScale(0,RoundingMode.HALF_EVEN);
}
for (i = 0; i < dataToBenormalized.size(); i++) {
dataAfternormalization.add(i,divide);
}
System.out.println(dataAfternormalization.toString());
}
public static BigDecimal mean() {
BigDecimal sum = new BigDecimal("0");
BigDecimal sizeOfTheList = new BigDecimal(dataToBenormalized.size());
for (int i = 0; i < dataToBenormalized.size(); i++) {
sum = sum.add(dataToBenormalized.get(i));
}
BigDecimal divide = sum.divide(sizeOfTheList); //line generate the exception
return divide.setScale(2,RoundingMode.HALF_EVEN);
}
public static BigDecimal standardDeviation() {
BigDecimal sd = new BigDecimal(Math.sqrt(variance().doubleValue()));
BigDecimal standardDeviation = sd.setScale(2,RoundingMode.HALF_EVEN);
return standardDeviation;
}
public static BigDecimal variance() {
BigDecimal sum = new BigDecimal("0");
List<BigDecimal> dataAfterSq = new ArrayList<>();
for (BigDecimal item : dataToBenormalized) {
BigDecimal subtract = item.subtract(mean());
dataAfterSq.add(subtract.pow(2));
}
for (BigDecimal item : dataAfterSq) {
sum = sum.add(item);
}
BigDecimal divide = sum.divide(new BigDecimal(dataToBenormalized.size()),RoundingMode.HALF_EVEN);
BigDecimal variance = divide.setScale(0,RoundingMode.HALF_EVEN).setScale(2);
return variance;
}
}
这是生成异常的行:
BigDecimal divide = sum.divide(sizeOfTheList);
请问谁能帮我解决这个问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)