2010-10-17 9 views
0

Un tableau de chaînes, noms, a été déclaré et initialisé. Ecrivez les instructions nécessaires pour déterminer si l'un des éléments du tableau est nul ou reportez-vous à la chaîne vide. Définissez la variable hasEmpty sur true si les éléments sont null ou vides, sinon définissez-les sur false.Recherche d'une chaîne vide dans un tableau

hasEmpty=false; 
    for (int i=0;i<names.length;i++) 
    if (names[i].trim().equals("") || names[i]==null) 
    hasEmpty=true; 

Quel est le problème avec mon code?

+0

@ColinD qu'est-ce qui a été édité? – Snowman

+1

J'ai ajouté l'étiquette de devoir, comme ceci se lit comme un devoir. Si ce n'est pas, mon erreur.Mais en regardant l'historique de vos questions, je pense que vous devez passer plus de temps à apprendre cela vous-même et un peu moins à poser des questions pour chaque chose. Si vous prenez le temps de comprendre certaines de ces choses par vous-même, vous finirez probablement par mieux comprendre. – ColinD

+0

Je demande seulement si je passe trop de temps là-dessus .. la plupart des réponses que j'ai reçues étaient des choses que je n'aurais jamais compris moi-même de toute façon ... comme vérifier null avant d'utiliser trim. Je ne l'aurais jamais compris, même si j'avais passé des heures dessus ... – Snowman

Répondre

2

L'appel trim() entraînera d'abord une exception NullPointerException si un membre du tableau est null. Inverser l'ordre des conditions - la nature de court-circuit de || s'assurera alors que trim est seulement appelée sur un objet String réel.

0

Envisager names[i].trim().

Lorsque names[i] est une chaîne, vous avez vraiment quelque chose comme someString.trim() qui fonctionne bien. Lorsque names[i] est un zéro, cependant, vous avez vraiment quelque chose comme null.trim(). Vous avez déjà découvert que null n'autorise pas une méthode trim(). (En fait, je ne suis même pas vraiment sûr de ce qu'est 'null'.)

Par conséquent, vous devez vérifier null avant d'appeler trim().

Lorsque vous avez a && b, où a et b sont des expressions, les contrôles sont effectués de gauche à droite et l'analyseur s'arrête dès que le problème est résolu. Donc pour l'opérateur logique et (& &), si a est faux alors b n'est jamais vérifié. C'est ce qui permet

if (a != null && a.trim().length() > 0) { ... } 

de travailler. si a est nul, la partie a.trim() n'est pas exécutée puisqu'elle serait inutile d'un point de vue logique; la valeur du conditionnel a été décidée.

De même pour

if (a == null || a.trim().length() == 0) { ... } 

si a est nul alors la partie a.trim() est jamais réalisée et nous ne sommes pas une erreur.

+0

* "En fait, je ne suis même pas vraiment sûr de ce que 'null' est." * - Voir http://java.sun.com/ docs/livres/jls/third_edition/html/typesValues.html # 4.1 –

+0

hehe Je l'ai cherché immédiatement après avoir posté. C'était à peu près ce que je pensais mais lire c'est bien. –

0

Vous pouvez utiliser le Apache Commons Lang's isBlank() pour vérifier une chaîne:

if (StringUtils.isBlank(names[i]) { 
    ... 
} 

StringUtils.isBlank est la vérification si la chaîne est null ou vide (à savoir si elle est égale à "" lorsque tous les espaces sont supprimés).

0

C'est de lancer une exception de pointeur nul parce que vous essayez d'exécuter une méthode sur un objet nul:

if (names[i].trim().equals("") || names[i]==null) 

Ainsi, à tout moment que les noms [] a un nom qui est nul, il va jeter l'exception. Une façon de résoudre le problème est de changer les instructions booléennes dans cette instruction if:

if (names[i]==null || names[i].trim().equals(""))