title: Java java.util.ConcurrentModificationException error
body: <p>please can anybody help me solve this problem last so many days I could not able to solve this error. I tried using synchronized method and other ways but did not work so please help me</p>
  
  <h3>Error</h3>
  
  <pre><code>java.util.ConcurrentModificationException
   at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
   at java.util.AbstractList$Itr.remove(Unknown Source)
   at JCA.startAnalysis(JCA.java:103)
   at PrgMain2.doPost(PrgMain2.java:235)
  </code></pre>
  
  <h3>Code</h3>
  
  <pre><code> public synchronized void startAnalysis() {
          //set Starting centroid positions - Start of Step 1
          setInitialCentroids();
          Iterator&lt;DataPoint&gt; n = mDataPoints.iterator();
          //assign DataPoint to clusters
          loop1:
          while (true) {
              for (Cluster c : clusters)
              {
                  c.addDataPoint(n.next());
                  if (!n.hasNext())
                      break loop1;
              }
          }
  
          //calculate E for all the clusters
          calcSWCSS();
  
          //recalculate Cluster centroids - Start of Step 2
          for (Cluster c : clusters) {
              c.getCentroid().calcCentroid();
          }
  
          //recalculate E for all the clusters
          calcSWCSS();
  
  
         // List copy = new ArrayList(originalList);
  
          //synchronized (c) {
  
          for (int i = 0; i &lt; miter; i++) {
              //enter the loop for cluster 1
  
           for (Cluster c : clusters) {
  
  
                  for (Iterator&lt;DataPoint&gt; k = c.getDataPoints().iterator(); k.hasNext(); ) {
               //    synchronized (k) {
  
                   DataPoint dp = k.next(); 
  
  
                      System.out.println("Value of DP" +dp);
                      //pick the first element of the first cluster
                      //get the current Euclidean distance
                      double tempEuDt = dp.getCurrentEuDt();
                      Cluster tempCluster = null;
                      boolean matchFoundFlag = false;
  
                      //call testEuclidean distance for all clusters
                      for (Cluster d : clusters) {
  
                          //if testEuclidean &lt; currentEuclidean then
                          if (tempEuDt &gt; dp.testEuclideanDistance(d.getCentroid())) {
                              tempEuDt = dp.testEuclideanDistance(d.getCentroid());
                              tempCluster = d;
                              matchFoundFlag = true;
                          }
                          //if statement - Check whether the Last EuDt is &gt; Present EuDt
  
                      }
                      //for variable 'd' - Looping between different Clusters for matching a Data Point.
                      //add DataPoint to the cluster and calcSWCSS
  
                      if (matchFoundFlag) {
            tempCluster.addDataPoint(dp);
  
           //k.notify();  
       //     if(k.hasNext())
            k.remove();
  
  
            for (Cluster d : clusters) {
                              d.getCentroid().calcCentroid();
                          }
  
                          //for variable 'd' - Recalculating centroids for all Clusters
  
                          calcSWCSS();
                    }
  
                      //if statement - A Data Point is eligible for transfer between Clusters.
                  // }// syn
                   }                 
                  //for variable 'k' - Looping through all Data Points of the current Cluster.
              }//for variable 'c' - Looping through all the Clusters.
          }//for variable 'i' - Number of iterations.
       // syn
      }
  </code></pre>