2016-06-12 2 views
0

J'ai cette méthode qui supprime un travailleur si son nom commence par une lettre affectée acceptée par la méthode removeWorker(). Quelqu'un peut-il expliquer comment fonctionne la deuxième boucle for?Suppression du tableau et gestion des espaces après la suppression d'un travailleur

public void removeWorker(String s) { 
    if (index == 0) { 
     System.out.println("There is any worker in array!"); 
     return; 
    } 
    for (int i = 0; i < index; i++) { 
     if (worker[i].getName().startsWith(s)) { 
      for (int j = i; j < index - 1; j++) { 
       worker[j] = worker[j + 1]; 
      } 
      worker[--index] = null; 
      i--; 
     } 
    } 
} 
+0

Que représente la variable d'index et l'avez-vous initialisée? – theVoid

Répondre

0

La deuxième boucle déplace tous les opérateurs un emplacement plus proche du début de la baie. Ceci est fait pour éviter les "trous" dans le tableau (ce qui se produirait si vous ne définissiez que l'élément null). Voici ce qui se passe:

if(worker[i].getName().startsWith(s)) 

Ceci vérifie si le travailleur avec l'index i doit être retiré.

for(int j = i; j < index - 1; j++) 
    { 

Cette boucle for itère sur tous les travailleurs ayant un indice supérieur ou égal à i, en commençant donc avec le travailleur à enlever. Il arrête avec l'avant-dernier indice, car il accède également au travailleur l'indice j + 1.

 worker[j] = worker[j + 1]; 

Ce ici déplace le travailleur avec l'indice j + 1 à la position j. Cela écrase le travailleur à supprimer avec le travailleur avec l'index supérieur suivant. Tous les autres travailleurs sont seulement décalés.

} 
    worker[--index] = null; 

Ici, le dernier travailleur est défini sur null, comme il a été enregistré dans la deuxième à la dernière position lors de la boucle. Cela garantit que le dernier travailleur n'est pas dans le tableau deux fois. L'index (le nombre de travailleurs) est également décrémenté avec --index car il y a un travailleur de moins dans la liste.

i--; 
} 

maintenant i est décrémenté comme il est déjà l'indice du prochain travailleur à vérifier et la boucle sera incrémenter à nouveau. Sans cela, le travailleur après le travailleur qui vient d'être retiré ne serait pas vérifié.

+0

Leon votre description est très utile :) Maintenant, je peux comprendre cette méthode. –

0

La deuxième boucle for déplace tous les éléments restants situés après celui que vous avez supprimé dans le tableau, afin d'éviter les espaces ouverts. De cette façon, le dernier est dupliqué, mais cela est corrigé après la boucle.