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é.
Que représente la variable d'index et l'avez-vous initialisée? – theVoid