Angepinnt CurrentModificationException

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • CurrentModificationException

      Dieser Fehler tritt auf, wenn ihr ein Objekt aus einer Liste entfernt, mit der gerade gearbeitet wird.

      Als Beispiel:
      Hier gehe ich in einer For-Schleife alle User durch und entferne ihn gleichzeitig.

      Java-Quellcode

      1. ArrayList<User> user = new ArrayList<User>();
      2. public void remove() {
      3. for(User u : user) {
      4. user.remove(u);
      5. }
      6. }


      Wie löse ich das Problem?


      1. Lösungsansatz: While-Schleife

      Hier erstelle ich eine While-Schleife, die folgende Bedingung hat: ,,Solange die ArrayList user nicht leer ist".
      In der Schlefie wird immer das erste Objekt der ArrayListe entfernt. Dadurch, dass die Schleife nicht direkt mit der ArrayListe arbeitet, gibt es keine Fehler.

      Java-Quellcode

      1. ArrayList<User> user = new ArrayList<User>();
      2. public void remove() {
      3. while(!user.isEmpty()) {
      4. user.remove(0);
      5. }
      6. }
      2. Lösungsansatz: For-Schleife mit ArrayList (Für Bedingungen geeignet)

      Hier wird eine 2. ArrayList erstellt, wo alle user abgespeichert werden, die entfernt werden sollen.
      Danach wird eine 2. For-Schleife diese ArrayList durchgehen und wird alle user, die in der 2. ArrayList sind, in der 1. ArrayList löschen.
      Auch hier wird nicht direkt bei der 2. For-SChleife mit der 1. ArrayList gearbeitet. Diese Art kann z.B. verwendet werden, wenn man eine Bedingung einbauen möchte, wann ein User nur entfernt werden darf.
      Beim Lösungsansatz 1 ist keine Bedingung möglich!


      Java-Quellcode

      1. ArrayList<User> user = new ArrayList<User>();
      2. public void remove() {
      3. ArrayList<User> removeUser = new ArrayList<User>();
      4. for(User u : user) {
      5. if(u.isInArea == true) {
      6. removeUser.add(u);
      7. }
      8. }
      9. for(User u : removeUser) {
      10. user.remove(u);
      11. }
      12. }
      Alles anzeigen
      Liebe Grüße, Pixel


      -> Ich bin euch immer ein Pixel vorraus!
      -> Ohne mich würdet ihr Minecraft nicht spielen können


      Der Pixelige-YouTube-Kanal: BestPixelHD
      - YouTube
      Der Pixelige-Twitch-Kanal: Twitch
    • Hey,

      Eine weitere Methode (welche auch am meisten genutzt wird) sind Iteratoren (wenn das überhaupt das deutsche Wort dazu ist).

      Kleiner Pseudo-Code (per Hand geschrieben) um das ganze ein wenig zu erklären:

      Java-Quellcode

      1. //Initialisiere ArrayList
      2. ArrayList<String> users = new ArrayList<>(Arrays.asList("Bernd", "Joachim"));
      3. //Hole Iterator-Objekt aus ArrayList
      4. Iterator iterator = user.iterator();
      5. //Loope Iterator solange, bis kein Eintrag mehr verfügbar ist.
      6. while(iterator.hasNext() {
      7. //Hole aktuellen Benutzernamen
      8. String userName = iterator.next();
      9. //Teste ob Benutzername gleich "Bernd" ist.
      10. if(userName.equals("Bernd")) {
      11. //Entfernen Eintrag
      12. iterator.remove();
      13. }
      14. }
      Alles anzeigen
      MfG