-1
votes

Exception de pointeur NULL lors de l'accès à la matrice avec référence NULL

Ma méthode est censée comparer le nom d'un chat de l'ensemble du tableau de chat.

Ceci est parce que mon tableau aura des nuls entre objets créés. p>

par exemple [0 (chat 0), 1 (Cat 1), 2 (Cat 2), 3 (NULL vide), 4 (CAT 4), 5 (CAT 5)] P>

Je pense que la raison pour laquelle je reçois une exception de pointeur nulle est parce que je Essayez de retourner une nulle et de le comparer au param (nom de catername de chaîne). P>

Comment puis-je éviter cela tout en recherchant dans l'ensemble de la matrice? P>

/**
 * @param catName to search for cat name
 */
public void searchCatByName(String catName) {

    if (cats[0] != null) {

        if(catName != null) {
            int index = 0;
            while (index < cats.length) {

                
                if(cats[index].getName() != catName) {

                    if(index == cats.length - 1) {

                        System.out.println(catName + " was not found in the cattery.");
                        break;
                    }
                    index++;
                } 
                else {

                    System.out.println(cats[index].getName() + " is in cage " + index);
                    break;
                }

            }
        }
    }
}


0 commentaires

3 Réponses :


1
votes

Vous devez vérifier si l'élément de tableau est null avant de comparer les noms avec chaîne égale code> méthode afin de: xxx pré>

Le bon état est: P >

Cat cat = cats[index];
if(cat != null && !cat.getsName().equals(catName)) { /* logic */ }


2 commentaires

Ne peut pas chats [index] être null qui causerait une NPE sur ... getname () ?


@Mikesamuel absolument correct, j'ai corrigé le code.



1
votes

Vérifiez si la valeur est égale à null. S'il n'est pas égal à NULL, faites votre état. J'ai fait un exemple dans le code ci-dessous

        String arr[] = new String[]{"tom","blake",null,"jerry"};
        String fider = "jerry";
        for (int i = 0; i < arr.length; i++)
        {
            if (arr[i] != null)
                if (arr[i].equals(fider))
                    System.out.println(i); // Prints 3
        }


1 commentaires

J'ai ajouté si (CATS [Index] .getName ()! = Null



0
votes

Utilisez une logique simple. Vérifiez d'abord l'élément de tableau si NULL, alors sinon NULL Comparez le nom du chat. Voici un exemple sur la façon dont vous devriez faire une vérification nulle et comparer des chaînes.

public class Cat {
    public static void main(String[] args) {

        String catName = "Cat3";
        String[] cats = new String[] {"Cat1","Cat2","Cat3", "", "Cat4"};
        searchCatByName(catName, cats);
        
    }
    
    public static void searchCatByName(String catName, String[]cats) {
    
        int catCounter = 0;
        for(int i=0;i<cats.length;i++){
            if (cats[i] != null){
                if(catName.equals(cats[i])){
                    System.out.println(catName + " is in cage no " + (i+1));
                    catCounter++;
                }
            }
        }
        if(catCounter == 0){
            System.out.println(catName + " was not found in the cattery.");
        }

    }
}


2 commentaires

Je comprends maintenant. J'essayais d'accéder à un objet NULL et de renvoyer le nom. Pour éviter la NPE, j'ai besoin d'abord vérifier si l'objet est null, avant de vérifier le nom. Merci +1


@Grantlee merci .. ajouté le code de chat non trouvé également.