2009-04-24 12 views
0

J'utilise le code suivantdoute si/else, si la logique

String sample = " : : "; 
String[] splitTime = sample.split(":"); 
if (splitTime[0].trim().equals("") || 
     splitTime[0].trim().equals(null)) { 
     System.out.println("Inside Split 0"); 
     splitTime[0] = "0"; 
} else if (splitTime[1].trim().equals("") || 
     splitTime[1].trim().equals(null)) { 
     System.out.println("Inside Split 1"); 
     splitTime[1] = "0"; 
}else if (splitTime[2].trim().equals("") || 
     splitTime[2].trim().equals(null)) { 
     System.out.println("Inside Split2"); 
     splitTime[2] = "0"; 
} 

System.out.println("Value 1 :"+splitTime[0]); 
System.out.println("Value 2 :"+splitTime[1]); 
System.out.println("Value 3 :"+splitTime[2]); 

SORTIE:
intérieur de Split 0
Valeur 1: 0
Valeur 2:
Valeur 3:
I ne sais pas pourquoi il ne va pas dans la deuxième et la troisième déclaration if-else. Quelqu'un peut-il m'aider? Parce que si la première instruction if est vraie, et donc est exécutée, alors le reste de l'ifs autre n'est pas exécuté.

+0

Essayez de résoudre ce en utilisant un foreach en boucle: foreach (point cordes dans splitTime) {/ * faire le travail pour chaque élément * /} – Groo

+1

foreach ne sert à rien ici car les chaînes sont immuables et les valeurs d'origine doivent être remplacées, en utilisant l'index du tableau. – Alnitak

Répondre

3

Si vous voulez exécuter les autres instructions else-if, pourquoi ne pas les réécrire en tant que instructions distinctes?

String sample = "::"; 
String[] splitTime = sample.split(":"); 
if (splitTime[0].trim().equals("") || 
     splitTime[0].trim().equals(null)) { 
     System.out.println("Inside Split 0"); 
     splitTime[0] = "0"; 
} 
if (splitTime[1].trim().equals("") || 
     splitTime[1].trim().equals(null)) { 
     System.out.println("Inside Split 1"); 
     splitTime[1] = "0"; 
} 
if (splitTime[2].trim().equals("") || 
     splitTime[2].trim().equals(null)) { 
     System.out.println("Inside Split2"); 
     splitTime[2] = "0"; 
} 

System.out.println("Value 1 :"+splitTime[0]); 
System.out.println("Value 2 :"+splitTime[1]); 
System.out.println("Value 3 :"+splitTime[2]); 
+0

Une norme pour l'itération en boucle sur le réseau serait utile en alternative. –

+0

en effet, c'est la bonne façon de faire ce que l'exemple semblait vouloir – Chii

2

C'est à cause du "else if".

Si vous avez du code qui fait:

if (a) { 
} else if (b) { 
} 

Ensuite, la seconde branche ne peut jamais être exécutée si la première branche était.

Au lieu de cela vous avez besoin:

if (a) { 
} 

if (b) { 
} 

pour rendre les conditions indépendantes.

BTW, String.trim() ne peut pas retourner null, et vous n'êtes pas garanti d'obtenir trois éléments dans la sortie de String.split(). Potentiellement meilleur code serait:

String sample = " : : "; 
String[] splitTime = sample.split(":"); 
for (int i = 0; i < splitTime.length; ++i) { 
    splitTime[i] = splitTime[i].trim(); 
    if (splitTime[i].length() == 0) { 
     splitTime[i] = "0"; 
    } 
} 
0

Ceci est dû à l'opération fondamentale d'une clause If-Else:

if(foo) { 
    // A 
} else if(bar) { 
    // B 
} 

Si foo est vrai, A exécutera, et bar ne seront jamais testés. Pour obtenir la sémantique que vous voulez, envisagez enchaînant simplement vos si blocs:

if(foo){ 
    // A 
} 

if(bar) { 
    // B 
} 
0

essaient

String sample = " 12 : 59 : 60 "; 
// strip spaces and create up to 3 parts 
String[] splitTime = sample.trim().split(" *: *", 3); 
for (int i = 0; i < splitTime.length; i++) 
    System.out.println("Inside " + i + " '" + splitTime[i] + '\''); 

Prints

Inside 0 '12' 
Inside 1 '59' 
Inside 2 '60'