Java pour la boucle se termine jamais


J'essaie de créer une boucle for de base qui ajoute les éléments d'une liste temporaire à la liste de tableaux principale. Cela provoque le crash de mon application Android à plusieurs reprises.

    for (int i = 0; i<tempFavList.size();i++){
        Log.v("MyApp",Integer.toString(tempFavList.size()));
        favourites.add(tempFavList.get(i).toString());
    }

Un débogage a montré que tempFavList.size() est égal à 2 avant l'appel de la boucle for, mais va à l'infini lorsque la boucle for est appelée (bien au moins à +500 000 avant que l'application se bloque). La liste tempFavList est une liste extraite d'une base de données d'analyse à l'aide du code tempFavList = currentUser.getList("favourites");

Je suis assez confus pourquoi la taille de la la liste temporaire augmente une fois que la boucle for est appelée, car je n'ajoute aucun élément dans la boucle for. Toute aide serait grandement appréciée

Author: moneymango, 2014-04-24

4 answers

, Vous pouvez essayer:

final int tempSize = tempFavList.size();

for (int i = 0; i < tempSize; i++){
    ....
}    
 3
Author: Baby, 2014-04-24 07:37:38

Ok donc voici ce que je pense que vous faites 95% du code que je poste ici est probablement ce que vous avez

import java.util.ArrayList;
import java.util.List;
public class Temp {
    static ArrayList<String> favourites = new ArrayList<String>();
    public static void main(String[] args) {
        List<String> myGuiltyList= CurrentUser.getList("favourites");
        for (int i = 0; i < myGuiltyList.size(); i++) {
            System.out.println("myInnocentList size = " + favourites.size());
            favourites.add(myGuiltyList.get(i));
            if (myGuiltyList.size() == 1000) {
                break;
            }
        }
    }
    private static class CurrentUser {
        public static List<String> getList(String listName) {
            favourites.add("1");
            favourites.add("2");
            favourites.add("3");
            if (listName.equals("favourites")) {
                return favourites;
            }
            else return null;
        }
    }
}

Le problème est que la liste statique que vous avez nommée favoris est en fait la MÊME liste que celle que vous obtenez lorsque vous appelez la ligne CurrentUser.getList("favourites");.

Donc ils sont en fait la même liste et vous ajoutez un élément à la même liste et la taille de la liste augmente avec chaque boucle et la boucle ne s'arrêtera jamais car la taille de la liste ne sera jamais plus petite que moi car ils augmentent avec la même chose ratio : D

 1
Author: zpontikas, 2014-04-24 15:21:12

Utilisez des itérateurs pour itérer:

for (Object o : tempFavList){
    Log.v("MyApp",Integer.toString(tempFavList.size()));
    favourites.add(o.toString());
}  

Il lèvera très probablement une exception, si la collection est modifiée lors de l'itération.

 0
Author: Denis Kulagin, 2014-04-24 07:40:46
for (Iterator iterator = tempFavList.iterator(); iterator.hasNext();)
{ favourites.add(iterator.next());}
 0
Author: Tareq, 2014-04-24 07:51:40