2017-09-02 10 views
0

J'ai créé cet analyseur JSON et je souhaite obtenir une copie de toutes les adresses différentes mais pas d'adresses répétées (il y a aussi beaucoup d'autres JSONobjects impliqués). Mais je continue d'obtenir une réponse d'erreur quand j'arrive à featuresArray.add(i, feature);. Qu'est-ce que je fais mal ici?Java utilisant continue dans la boucle pour la vérification des chaînes en double

private static void simpleJSON() throws IOException { 
    JSONParser parser = new JSONParser(); 
    JSONArray featuresArray = new JSONArray(); 
    String check = "check"; 

    try { 

     Object obj = parser.parse(new FileReader(filepath)); 
     JSONArray jsonarray = (JSONArray) obj; 
     for (int i = 0; i < jsonarray.size(); i++) { 
      JSONObject jsonobject = (JSONObject) jsonarray.get(i); 
      String location_name = (String) jsonobject.get("location_name"); 
      String street_address = (String) jsonobject.get("street_address"); 
      if (street_address.equals(check)) { 
       continue; 
      } 
      check = street_address; 

      Map feature = new LinkedHashMap(); 
      feature.put("location_name", location_name); 
      feature.put("street_address", street_address); 
      featuresArray.add(i, feature); 
     } 
    } catch (ClassCastException c) { 
     c.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

Voici le javadoc de la méthode lançant l'exception (que vous avez omis de publier): https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#add-int- E-. Il explique quand l'exception est levée. Lire les traces de la pile. Lisez javadoc. Pourquoi n'utilisez-vous pas 'add (feature)'? N'utilisez pas non plus de types bruts (vous devriez aussi avoir des avertissements pour le compilateur). –

+0

quelle bibliothèque vous utilisez pour l'analyse est-il Gson? –

Répondre

0

Dans votre cas,

if (street_address.equals(check)) { 
    continue; 
} 

chaque fois que le bloc ci-dessus exécution, déclaration continue en particulier le contrôle des sauts à

for (....; i++) 

de sorte que le i va incrémenté Tobe.
Supposons maintenant que i = 1 et que la condition equals devienne vraie alors i va s'incrémenter.
alors je devient 2. Supposons maintenant equals fausses déclarations alors cette déclaration exécute

featuresArray.add(i, feature); 

donc, j'étais 1 et il est maintenant 2, donc il sauter l'indice 1 dans ce cas.
Cela peut causer le problème.

Vous pouvez modifier votre codition comme ceci:

if (street_address.equals(check)) { 
    i--; 
    continue; 
} 

pour contrer l'augmentation de l'indice.