2017-10-12 37 views
1

我有一个ArrayList,其中包含以下字符串:[name, age, gender, salary]有没有一种方法可以使用我的ArrayList中的值作为case表达式?明显的答案是否定的,因为case表达式必须是常量表达式。但是,我想知道如果我不能使用开关/外壳,最好的方法是做什么。使用列表中的值作为switch/case语句中的一个案例

需要明确的是,预期的行为是这样的:

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

我想XXX是,和YYY是性别,这都来自ArrayList中。我愿意使用if/else,如果这不能用switch/case来完成的话。我该如何做这样的事情?谢谢。

+0

是您的列表总是将是相同的长度? –

+0

@HaydenPassmore是的。但是元素的顺序可能会改变。 – user8543721

+0

好的,你想让你的案例表达式与列表的顺序相同吗? –

回答

2

如果你真的想用一个开关的情况下,不能使用非本地Java对象,我会尝试的东西沿着这行:

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

我喜欢这种方法。但是,这是假设情况0总是映射到名称,情况1总是映射到年龄等等...对吗? – user8543721

+0

这是正确的。处理这个问题的一个更好的方法是让一个具有姓名,年龄,性别和薪水属性的人成为班级。它让您更方便地控制每个属性的处理方式。 – luckydog32

+1

我不能评论其他人的帖子,因为我的名声太低,但海登的解决方案不会编译,因为字符串仍然不是一个常数。 – luckydog32

相关问题