1

したがって、case ステートメントで変数を使用できないことはわかっています。代替としてかなり効率的なコードを誰かが教えてくれることを願っています。(たとえば、たくさんのifを実行できます)。

状況は、オブジェクト データの配列があり、その配列を反復処理したいということです。配列内の位置は、以下に示すように名前で指定されます (int...ordinal ステートメント)。基本的に、配列の特定のメンバーに「結果」生成オブジェクトを割り当てる必要があります (それらが C_VENT_RATE などの離散データである場合)。これを簡単に実行できる唯一の方法は、if (i.equals(pr_int)) などの一連の if を実行することです。

  ArrayList<String[]> rawEKGs  = ekgFile.getForMrno( docInfo.getMedicalRecordNumber() );

  for (String[] parts : rawEKGs) {
    for (int i=0; i< parts.length; i++ )
    {
      Result result = docInfo.getResult();
      boolean process = true;
      final int vent_rate = UncEKG.COL_NAMES.C_VENT_RATE.ordinal();
      int art_rate = UncEKG.COL_NAMES.C_ART_RATE.ordinal();
      int pr_int = UncEKG.COL_NAMES.C_PR_INTERVAL.ordinal();
      int qrs_dur =  UncEKG.COL_NAMES.C_QRS_DURATION.ordinal();
      int qt_qtc =  UncEKG.COL_NAMES.C_QT_QTC.ordinal();
      int prt =  UncEKG.COL_NAMES.C_PRT_AXES.ordinal();


      switch(i) {
        case : // something
          break;
        default: process = false;
      }
4

4 に答える 4

4

すでに列挙型があるため、Command列挙型をコマンドにマッピングする EnumMap を使用してパターンを試すことができます。

Commandインスタンスは、case ステートメントの 1 つと同じロジックになります。

EnumMap<UncEKG.COL_NAMES, Command> map = ...
//values is in ordinal order
//pulled out for performance reasons
UncEKG.COL_NAMES[] names = UncEKG.COL_NAMES.values();
for (String[] parts : rawEKGs) {
    for (int i=0; i< parts.length; i++ ){
       map.get(names[i]).execute();
    }
}
于 2013-10-01T21:00:05.407 に答える
1

このようにしてください

    switch(i) {
        case 0: // something
          break;
        case 1: // something
          break;
        case 2: // something
          break;
         .
         .
         .
         .
        default: process = false;
      }
于 2013-10-01T20:47:27.260 に答える