2017-10-12 4 views
1

私は、ArrayListの中に次の文字列を持っています:[name, age, gender, salary]ArrayListの値をcase式に使用する方法はありますか?ケース式は定数式でなければならないので、明らかな答えはnoです。しかし、スイッチ/ケースを使用できない場合、これを行う最善の方法は何だろうと思います。リストからの値をスイッチ/ケースステートメントの大文字として使用する

明確にするために、意図した動作は、このようなものです:

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

私はXXXは、ArrayListの両方から来る性別、あることを、およびYYYになりたいです。 if/elseをswitch/caseで行うことができない場合は、私はif/elseを使用することができます。このようなことをどうすればできますか?ありがとう。あなたが本当にスイッチケースを使用すると、非ネイティブのJavaオブジェクトを使用できない場合

+0

はあなたのリストは常に同じ長さになるだろう? –

+0

@HaydenPassmoreはい。しかし要素の順序は変わるかもしれません。 – user8543721

+0

あなたのケースの表現をあなたのリストと同じ順序にしたいですか? –

答えて

2

、私はこの線に沿って何かをしようとするだろう:

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

私の評判が低すぎるので、私は他の人の投稿にコメントすることはできませんが、文字列はまだ定数ではないため、Haydenのソリューションはコンパイルされません。 – luckydog32

関連する問題