Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de out of bounds en java

    24 juillet 2021 à 16:05:25

    Je suis un débutant en java , et ici mon probleme est que quand j' execute il y a écrit : Exception in thread "Thread - 2" java.lang.ArrayIndexOuOfBoundsException : 7 >=  7

    Il y a Vector que je parcours dans une boucle et l'indice par qui je la parcours est apparament "out of bounds" or la condition d' arrêt du boucle est jusqu' à la taille de ce Vector

    Pourriez vous m'aider .

    Merci

    while(1 < 2)
            {
                min = noeud_actuel.get_f();
                open = construct_open_list(noeud_actuel.get_x(), noeud_actuel.get_y(), noeud_actuel);
                for(int i = 0; i < open.size(); i++)
                {
                    if(open.elementAt(i) instanceof Node)
                    {
                        Node nd = (Node)open.elementAt(i);
                        if(min > nd.get_f())
                        {
                            min = nd.get_f();
                        }
                    }
                }
                for(int k = 0; k < open.size(); k++)
                {
                    Node nd = (Node)open.elementAt(k); //c'est ici qu'il y a un probleme. Ce k est dit out of bounds
                    if(min == nd.get_f())
                    {
                            open.remove(open.elementAt(k));
                            this.closed_list.add(open.elementAt(k));
                            noeud_actuel = nd;
                            break;
                    }
                }
                if(noeud_actuel.get_x() > xFin && noeud_actuel.get_x() < xFin + 30 && noeud_actuel.get_y() < yFin && noeud_actuel.get_y() +30 > yFin || noeud_actuel.get_x() > xFin && noeud_actuel.get_x() < xFin + 30 && noeud_actuel.get_y() > yFin && noeud_actuel.get_y() < yFin + 30 || noeud_actuel.get_x() < xFin && noeud_actuel.get_x() + 30 > xFin && noeud_actuel.get_y() < yFin && noeud_actuel.get_y() +30 > yFin || noeud_actuel.get_x() < xFin && noeud_actuel.get_x() + 30 > xFin && noeud_actuel.get_y() > yFin && noeud_actuel.get_y() < yFin + 30)
                {
                     break;
                }
            }


    L'erreur est écrite c'est que : java.Util.Vector.elementAt(Unknown source)

    Donc le programme ne voit plus le k?

    • Partager sur Facebook
    • Partager sur Twitter
      24 juillet 2021 à 18:37:45

      Il faudrait serieusement changer de cours. Depuis Java 5 (Maintenant on doit être à Java 17...) on utilise ArrayList à la place de Vector. La généricité évite le transtypage, et permet de détecter des erreurs de programmation.

      Supposons que la taille soit 5. Au dernier tour, k=4. Un élément est enlevé par remove, la taille descent à 4. Et  à l'instruction suivante, pour elementAt(k), k est en dehors des bornes.

      C'est toujours dangereux de parcourir un conteneur en supprimant ses éléments.

      Solution :

      • Parcourir et construire une liste des éléments à conserver
      • À la fin, s'en servir pour remplacer la liste d'origine.

      -
      Edité par michelbillaud 24 juillet 2021 à 18:40:39

      • Partager sur Facebook
      • Partager sur Twitter
        25 juillet 2021 à 19:41:22

        Enfin, il est plus simple d'utiliser un Iterator<Node> itr et itr.remove();

        Mais pas très efficace s'il y a beaucoup d'éléments. Dans ce cas il vaut mieux construire une nouvelle ArrayList dans laquelle on insère les éléments qu'on veut garder.

        • Partager sur Facebook
        • Partager sur Twitter

        Probleme de out of bounds en java

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown