2017-10-12 3 views
1

J'ai une ArrayList qui contient les chaînes suivantes: [name, age, gender, salary]. Existe-t-il un moyen d'utiliser les valeurs de ma liste de tableaux pour être des expressions de cas? La réponse évidente serait non, puisque les expressions de cas doivent être des expressions constantes. Cependant, je me demande quelle serait la meilleure façon de procéder si je ne pouvais pas utiliser le commutateur/boîtier.Utilisation des valeurs d'une liste comme cas dans une instruction switch/case

Pour être clair, le comportement prévu est quelque chose comme ceci:

switch (parameter) { 
    case XXX: 
     // some code here 
    case YYY: 
     // some code here 
} 

Je veux XXX être nom et YYY être genre, tous deux viennent du ArrayList. Je suis ouvert à l'utilisation de if/else si cela ne peut pas être fait avec switch/case. Comment puis-je faire quelque chose comme ça? Merci.

+0

Est-ce votre liste va toujours être la même longueur ? –

+0

@HaydenPassmore Oui. Mais l'ordre des éléments pourrait changer. – user8543721

+0

Ok, voulez-vous que vos expressions de cas soient dans le même ordre que votre liste? –

Répondre

2

Si vous voulez vraiment utiliser un boîtier de commutation et ne peut pas utiliser des objets java non natifs, je voudrais essayer quelque chose le long des lignes de celle-ci:

public void test(){ 

    String[] array = {"name", "age", "gender", "salary"}; 

    String value = "name"; 

    switch(indexOf(value, array)){ 
     case 0: 
      //code 
      break; 
     case 1: 
      //code 
      break; 
     case 2: 
      //code 
      break;  
     case 3: 
      //code 
      break; 
     default: 
      //value wasnt in array 
    } 
} 

public int indexOf(String value, String[] array){ 
    for(int i = 0; i < array.length; i++){ 
     if(array[i].equals(value)){ 
      return i; 
     } 
    } 
    //return a place holder value 
    return -1; 
} 
+0

J'aime l'approche. Cependant, ceci suppose que le cas 0 correspond toujours au nom, le cas 1 correspond toujours à l'âge, etc ... non? – user8543721

+0

C'est exact. Une meilleure façon de gérer ce problème serait de créer une classe de personne avec les attributs de nom, d'âge, de sexe et de salaire. Il vous donne plus de contrôle sur la façon dont vous voulez gérer chaque attribut. – luckydog32

+1

Je ne peux pas commenter les messages d'autres peuples parce que ma réputation est trop faible, mais la solution de Hayden ne compilera pas parce que les chaînes ne sont toujours pas une constante. – luckydog32