Je dois utiliser cette méthode addInOrder pour ajouter des personnes à ma LinkedList mais par ordre alphabétique par lastName puis firstName. Une fois que j'ai ajouté la personne à la liste, je dois retourner vrai ou faux selon qu'elle l'a ajoutée ou non. J'ai créé une méthode compareTo qui renvoie 0 si deux entrées ont le même prénom et le même nom de famille. Il renverrait -1 si le lastName vient par ordre alphabétique avant l'objet auquel il est comparé (si le lastName est le même, alors il recourt à vérifier le firstName). Enfin, il renverrait 1 si le nom est alphabétiquement après l'objet auquel il est comparé. J'ai testé la méthode compareTo plusieurs fois et je peux confirmer qu'elle fonctionne. Voici le code pour cela :

public int compareTo(PhoneDirectoryEntry other) {

        if (this.firstName.equals(other.firstName) && this.lastName.equals(other.lastName)) {
            return 0;
        } else if (this.lastName.compareTo(other.lastName) < 0) {
            return -1;
        } else if (this.lastName.compareTo(other.lastName) > 0) {
            return 1;  
        } else if (this.firstName.compareTo(other.firstName) < 0) {
            return -1;
        } else
            return 1;
        }
    }

Mon problème repose sur ma méthode addInOrder.

public boolean addInOrder(String firstName, String lastName, String phoneNumber) {
        //to be completed by you
        if (list.isEmpty()) {
                PhoneDirectoryEntry person = new PhoneDirectoryEntry(firstName, lastName, phoneNumber);
                list.add(person);
                return true;
        } for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getLastName().compareTo(lastName) == -1) {
                PhoneDirectoryEntry person = new PhoneDirectoryEntry(firstName, lastName, phoneNumber);
                list.add(i, person);
                return true;
            } else if (list.get(i).getLastName().compareTo(lastName) == 1) {
                PhoneDirectoryEntry person = new PhoneDirectoryEntry(firstName, lastName, phoneNumber);
                list.add(i++, person);
                return true;
            }
        }
        return false;
    }

Ma première instruction if fonctionne parfaitement et parviendra toujours à ajouter une personne à la liste vide. La boucle for s'exécute également. Le problème réside dans l'instruction if. J'ai essayé toutes les variantes de l'instruction if comme :

list.get(i).getLastName().compareTo(lastName) == -1 || list.get(i).getFirstName().compareTo(firstName) == 1

Et aucun d'entre eux n'a fonctionné. Donc je suis juste coincé avec cette ligne. Si quelqu'un peut voir mon problème ou a besoin de plus d'informations, faites le moi savoir. Merci.

0
khaleesi 8 oct. 2019 à 01:42

1 réponse

Meilleure réponse

Votre méthode compareTo utilise la classe PhoneDirectoryEntry, elle comparera donc deux objets PhoneDirectoryEntry. Ce que vous faites dans la boucle for est d'obtenir le nom de famille dans votre classe PhoneDirectoryEntry et d'appeler la méthode compareTo de la chaîne. La méthode compareTo de String est celle implémentée par Java, pas votre méthode compareTo.

0
Nat 7 oct. 2019 à 22:51