Hi,
So I've been working on this program to make tournament matches for beach volley. Now I'm stuck on this one thing I just can't figure out.
First little info: (I'm Belgian so some words are Dutch)
-Class Speler: has arraylist with information with which player already has been played (codesLijst)
-Class Inschrijvingen: makes players sign up with their level and name
-Class Wedstrijd: makes matches, checks with Inschrijvingen if the players already have played together. If so, gives message that they need to change partner. If not, makes them a team.
Now if I run the program with fresh players, none of them have had a partner, it works fine. If I make just one new team and the other already exists, it also works fine. It's when I make the two teams with existing records (to see whether they already played together), that the error comes.
I am aware of what the error means, but I am too noob to solve it.
I know there's a lot of code duplicate, will clear out eventually, this is just a raw version.
CLASS SPELER
import java.util.ArrayList; public class Speler { private Wedstrijden wedstrijd; private Inschrijvingen inschrijving; private String naam, ploeg; private int setPunten, winPunten; private long time; private String code; private ArrayList<String> lijstCodes = new ArrayList<String>(); public Speler(String spelerNaam, String spelerPloeg, Inschrijvingen inschrijving, Wedstrijden wedstrijd) { this.inschrijving = inschrijving; this.wedstrijd = wedstrijd; naam = spelerNaam; ploeg = spelerPloeg; } //SETTER public void setPoints(int setPunten, int winPunten){ this.setPunten = setPunten; this.winPunten = winPunten; } public void setTime(long time) { this.time = time; } public void setCode(String code){ this.code = code; lijstCodes.add(code); } //GETTER public String getNaam(){ return naam; } public String getPloeg(){ return ploeg; } public ArrayList<String> getCode(){ return lijstCodes; } }
CLASS INSCHRIJVINGEN
import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JPanel; import javax.swing.JTextField; public class Inschrijvingen extends JPanel{ private Wedstrijden wedstrijd; private Menu frame; private JButton buttonNewInschrijving; private JTextField txtNewPerson; private JComboBox<String> comboBoxPloeg; private ArrayList<Speler> spelersLijst; private Speler newPlayer; public Inschrijvingen(Menu frame) { this.frame = frame; String[] stringPloegen = { "H1", "H2", "D1", "D2", "D3" }; comboBoxPloeg = new JComboBox<String>(stringPloegen); spelersLijst = new ArrayList<Speler>(); setLayout(new FlowLayout()); buttonNewInschrijving = new JButton("Schrijf in!"); txtNewPerson = new JTextField(20); add(txtNewPerson); add(buttonNewInschrijving); buttonNewInschrijving.addActionListener(new EventHandlerAll()); } public ArrayList<Speler> getSpelers() { return spelersLijst; } class EventHandlerAll implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource() == buttonNewInschrijving) { String tmpPloeg = (String)comboBoxPloeg.getSelectedItem(); String tmpNewPlayer = txtNewPerson.getText(); newPlayer = new Speler(tmpNewPlayer, tmpPloeg, frame.getInschrijving(), frame.getWedstrijd()); spelersLijst.add(newPlayer); txtNewPerson.grabFocus(); txtNewPerson.selectAll(); for(Speler sss: spelersLijst){ System.out.println(sss.getNaam()); } } } } }
CLASS WEDSTRIJDEN (MAIN CLASS)
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; public class Wedstrijden extends JPanel{ private Inschrijvingen inschrijving; private Menu frame; private Speler ploegSpeler; private JPanel panelSpelers, panelButtons; private JButton buttonNextMatch, buttonPreviousMatch, buttonMakeMatch, buttonViewAllMatches, buttonRegisterMatch, buttonSearchMatch; private JLabel lblX1, lblX2;//, lblSpeler1, lblSpeler2, lblSpeler3, lblSpeler4; private JTextField txtSpeler1, txtSpeler2, txtSpeler3, txtSpeler4; private JRadioButton radioWinA, radioWinB; private String code; private ArrayList<String> codesLijst = new ArrayList<String>(); private int wedstrijdNr, arraySize; public Wedstrijden(Inschrijvingen inschrijving, Menu frame) { wedstrijdNr = 1; this.inschrijving = inschrijving; this.frame = frame; panelSpelers = new JPanel(); panelButtons = new JPanel(); } private void makePloeg() { for (Speler sp1: inschrijving.getSpelers()){ ploegSpeler = sp1; arraySize = ploegSpeler.getCode().size(); if(ploegSpeler.getNaam().equalsIgnoreCase(txtSpeler1.getText())){ if(arraySize == 0){ makeCodePloeg1(); }else makePloegNotSamePlayers1(); }else{ if(ploegSpeler.getNaam().equalsIgnoreCase(txtSpeler3.getText())){ if(arraySize == 0){ makeCodePloeg2(); }else{ makePloegNotSamePlayers2(); System.out.println("HIER KOMT EM OPOK!"); } } } } } private void makePloegNotSamePlayers1() { for (String s1: ploegSpeler.getCode()){ for (Speler sp2: inschrijving.getSpelers()){ if(sp2.getNaam().equalsIgnoreCase(txtSpeler2.getText())){ for (String s2: sp2.getCode()){ if(s2.equalsIgnoreCase(s1)){ //HERE BE CHANGE PLOEG System.out.println("HERE BE CHANGE PLOEG1"); }else{ //LOOK AT THE TIME, IS IT THAT LATE ALREADY? //ONE'S IN TXT WILL MAKE NEW TEAM makeCodePloeg1(); System.out.println("NEW TEAM MADE 1"); } } } } } } private void makePloegNotSamePlayers2() { Same as makePloegNotSamePlayers1(), but with txtSpeler4 instead of txtSpeler2 } private void makeCodePloeg1() { Same as makeCodePloeg2(), but with txtSpeler1 and txtSpeler2 instead of txtSpeler3 and txtSpeler4 } private void makeCodePloeg2() { //CODE FOR SEARCH String tmpFirst2for1 = txtSpeler3.getText().substring(0, 2); String tmpFirst2for2 = txtSpeler4.getText().substring(0, 2); String tmpCode = tmpFirst2for1 + tmpFirst2for2 + wedstrijdNr; //END //CODE FOR COMPARISON String tmpPloeg3 = null; String tmpPloeg4 = null; tmpPloeg3 = ploegSpeler.getPloeg(); for (Speler getPloeg: inschrijving.getSpelers()){ if(getPloeg.getNaam().equalsIgnoreCase(txtSpeler4.getText())){ tmpPloeg4 = getPloeg.getPloeg(); } } String tmpCodeC = txtSpeler3.getText() + tmpPloeg3 + txtSpeler4.getText() + tmpPloeg4; //END if(arraySize == 0){ for(Speler speler2Code: inschrijving.getSpelers()){ if(speler2Code.getNaam().equalsIgnoreCase(txtSpeler4.getText())){ speler2Code.setCode(tmpCodeC); codesLijst.add(tmpCode); System.out.println(tmpCode + " Speler 4"); System.out.println(tmpCodeC); } } }else{ for(String stringCode: ploegSpeler.getCode()){ if(stringCode.equalsIgnoreCase(tmpCodeC)){ System.out.println("HIER KOMT EM DAN WEL voor 2"); }else{ for(Speler speler2Code: inschrijving.getSpelers()){ if(speler2Code.getNaam().equalsIgnoreCase(txtSpeler4.getText())){ speler2Code.setCode(tmpCodeC); codesLijst.add(tmpCode); System.out.println(tmpCode + " Speler 4"); System.out.println(tmpCodeC); } } } } } if(ploegSpeler.getNaam().equalsIgnoreCase(txtSpeler3.getText())){ ploegSpeler.setCode(tmpCodeC); System.out.println(tmpCode + " Speler 3"); } } //EVENTHANDLER class EventHandlerAll implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource() == buttonMakeMatch){ makePloeg(); wedstrijdNr++; } if(e.getSource() == buttonSearchMatch){ System.out.println(codesLijst); } //REGISTER MATCH if(e.getSource() == buttonRegisterMatch){ if(radioWinA.isSelected()) { String tmpWinner1 = txtSpeler1.getText(); String tmpWinner2 = txtSpeler2.getText(); for( Speler s: inschrijving.getSpelers()){ if(s.getNaam().equalsIgnoreCase(tmpWinner1)){ s.setPoints(3, 1); } if(s.getNaam().equalsIgnoreCase(tmpWinner2)){ s.setPoints(3, 1); } } }else if(radioWinB.isSelected()){ String tmpWinner1 = txtSpeler3.getText(); String tmpWinner2 = txtSpeler4.getText(); for( Speler s: inschrijving.getSpelers()){ if(s.getNaam().equalsIgnoreCase(tmpWinner1)){ s.setPoints(3, 1); } if(s.getNaam().equalsIgnoreCase(tmpWinner2)){ s.setPoints(3, 1); } } } } } } }
ERROR CODE
JoJi2 Speler 4 JorgH1JillD2 JoJi2 Speler 3 NEW TEAM MADE 2 Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:886) at java.util.ArrayList$Itr.next(ArrayList.java:836) at me.kevoc.beach.Wedstrijden.makePloegNotSamePlayers2(Wedstrijden.java:174) at me.kevoc.beach.Wedstrijden.makePloeg(Wedstrijden.java:140) at me.kevoc.beach.Wedstrijden.access$1(Wedstrijden.java:125) at me.kevoc.beach.Wedstrijden$EventHandlerAll.actionPerformed(Wedstrijden.java:302)
Will be very grateful to anyone who can help me with this