如何避免;“线程中的异常”;“主要”;java.util.ConcurrentModificationException“;Java中的错误

如何避免;“线程中的异常”;“主要”;java.util.ConcurrentModificationException“;Java中的错误,java,exception,Java,Exception,我试图计算标准偏差,平均偏差等。我试图写下面的代码。但是它有异常java.util.ConcurrentModificationException。我正在尝试修复它,但失败了 我的代码: package statistic; import java.util.*; public class StanderDeviation { public static void main(String[] args) { System.out.println("step 1:c

我试图计算标准偏差,平均偏差等。我试图写下面的代码。但是它有异常java.util.ConcurrentModificationException。我正在尝试修复它,但失败了

我的代码:

package statistic;

import java.util.*;

public class StanderDeviation {

    public static void main(String[] args) {

        System.out.println("step 1:create a list of 10 numbers :");

        List<Double> numbers = new ArrayList<Double>();
        numbers.add(23.0);
        numbers.add(92.0);
        numbers.add(46.0);
        numbers.add(55.0);
        numbers.add(63.0);
        numbers.add(94.0);
        numbers.add(77.0);
        numbers.add(38.0);
        numbers.add(84.0);
        numbers.add(26.0);
        System.out.println("\n " +numbers);

        System.out.println("step 2: average  of 10 numbers : ");

        double sum = 0;
        for(double number : numbers)
        {
            sum= sum +number;
        }
        double average = sum / numbers.size();
        System.out.println(sum + " / " + numbers.size() + " = " + average);

        System.out.println("\nstep 3: difference between each number numbers and average :");

        List<Double>listOfDifferences = new ArrayList<Double>();
        for(double number : numbers)
        {
            double difference = number - average ;
            listOfDifferences.add(difference);
            System.out.printf("%2.2f", difference);
            System.out.printf(" "); 
        }


         System.out.println("\n\nstep 4: Square of above calculate difference :");

        List<Double> squares = new ArrayList<Double>();
        for(double difference : listOfDifferences)
        {
            double square = difference * difference ;
            listOfDifferences.add(difference);
            squares.add(square);
            System.out.printf("%4.2f", square);
            System.out.printf(" "); 
        }
        System.out.println("\nstep 5:sum of Square   calculate above :");

        sum = 0;
        for(double number : squares)
        {
            sum += number ; 
        }
        System.out.println(sum);
        System.out.println();

        System.out.println("step 6: divide sum of Square by totle (numbers)-1 :");

        double result = sum / (numbers.size()-1);
        System.out.printf("%4.2f", result);
        System.out.println();

        System.out.println("\nstep 7: Stander Deviation is the Square root of obove result :");

        double StanderDeviation = Math.sqrt(result);
        System.out.printf("%4.2f", StanderDeviation);
    }
}

提前感谢。

您的问题就在这个循环中:

for(double difference : listOfDifferences)
{
    double square = difference * difference ;
    listOfDifferences.add(difference);
    squares.add(square);
    System.out.printf("%4.2f", square);
    System.out.printf(" "); 
}
您正在尝试将某些内容添加到当前正在迭代的列表中

只需删除差异列表中的行
add(差异)


它不会影响标准偏差的计算。(将刚刚从差异列表中收到的
差异添加回同一个列表是没有意义的!)

您可以创建其他
列表
结构(,如果您的情况确实需要它)并向其中添加元素,如:

   List<Double> changed = new ArrayList<Double>();

        for(double difference : listOfDifferences)
        {
            double square = difference * difference ;
//            listOfDifferences.add(difference);
            squares.add(square);
            changed.add(difference);
            System.out.printf("%4.2f", square);
            System.out.printf(" ");
        }
List changed=new ArrayList();
for(双重差异:差异列表)
{
双平方=差*差;
//差异列表。添加(差异);
正方形。添加(正方形);
更改。添加(差异);
System.out.printf(“%4.2f”,正方形);
System.out.printf(“”);
}
无法修改您迭代的
集合


不要通过添加或删除列表中的项目来修改正在迭代的列表。对不起,我不明白。我是java新手。你能解释一下吗?希望对你有帮助在一个for循环中,比如
for(双重差异:差异列表){…}
你不能在
差异列表中添加或删除项目。
   List<Double> changed = new ArrayList<Double>();

        for(double difference : listOfDifferences)
        {
            double square = difference * difference ;
//            listOfDifferences.add(difference);
            squares.add(square);
            changed.add(difference);
            System.out.printf("%4.2f", square);
            System.out.printf(" ");
        }