为什么我在线程“main”中得到异常 java.lang.ArithmeticException: Division undefined?

问题描述

我正在编写一个程序来计算数据的 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 (将#修改为@)