2

大学時代に「二分探索」や「二分スイッチ」でスイッチを使っていたのを覚えています。みたいな感じで、今日Google fooが壊れました。とにかく、次のようになります: 可能なオプション (通常は文字列) の配列を定義すると、いくつかの魔法が起こり、配列内のそれらのオプションがスイッチのケースになります。これが機能するには、アルファベット順に並べる必要があったことを覚えています。魔法を覚えるのを手伝ってくれませんか?私が見るべきものの名前でさえ素晴らしいでしょう。

4

6 に答える 6

10

あなたが探しているのはEnumだと思います。

上のリンクから…

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
}

public class EnumTest {

    Day day;

    public EnumTest(Day day) {
        this.day = day;
    }

    public void tellItLikeItIs() {
         switch (day) {
            case MONDAY:
                 System.out.println("Mondays are bad.");
                 break;

            case FRIDAY:
                 System.out.println("Fridays are better.");
                 break;

            case SATURDAY:
            case SUNDAY:
                 System.out.println("Weekends are best.");
                 break;

            default:
                 System.out.println("Midweek days are so-so.");
                 break;
        }
    }

    ....
}
于 2008-11-12T02:58:44.727 に答える
1

gperfのことですか?それとも、一般的な理論 (ハッシュ) について言及していたのでしょうか?

http://www.gnu.org/software/gperf/

于 2008-11-12T03:58:18.460 に答える
0

スイッチなしで Enum を使用すると、次のようになります。

public enum Day {
    SUNDAY {
      public String tellItLikeItIs() {
        return "Weekends are best.";
      }
    },
    MONDAY {
      public String tellItLikeItIs() {
        return "Mondays are bad.";
      }
    }, 
    TUESDAY, 
    WEDNESDAY, 
    THURSDAY, 
    FRIDAY {
      public String tellItLikeItIs() {
        return "TGI Friday.";
      }
    }, 
    SATURDAY {
      public String tellItLikeItIs() {
        return "Weekends are best.";
      }
    }

    public String tellItLikeItIs() {
       return "Midweek days are so-so.";
    }
}

public class TodayIs{
    public static void main(String... args) {
         Day day = Day.valueOf(args[0].toUppercase());
         System.out.println(day.tellItLikeItIs());
    }
}
于 2009-02-26T19:53:53.913 に答える
0

通常、私はそのような方法でスイッチを悪用しません (できたとしても)。case 行では定数値しか許可されないため、switch ステートメントで配列を機能させることはできません。以下のようなパターンや列挙を考えていませんか?

final int RED = 0;
final int YELLOW = 1;
final int BLUE = 2;
final int GREEN = 3;

String[] colors = new String[] { "red", "yellow", "blue", "green" };

switch (color) {
    case RED:
        System.out.println(colors[RED]);
        break;
    case YELLOW:
        System.out.println(colors[YELLOW]);
        break;
    ...the rest
}
于 2008-11-12T03:11:26.077 に答える
0
public enum Day {
    SUNDAY ("sundays are this"),
    MONDAY ("mondays are that"), 
    TUESDAY ("blah"), 
    WEDNESDAY ("blah"), 
    THURSDAY ("blah"), 
    FRIDAY ("blah"), 
    SATURDAY ("more blah");

    private final String tell;

    public Day(String tell){
       this.tell = tell;
    }
    public String tellItLikeItIs() {
       return this.tell;
    }
}

public class TodayIs{
    public static void main(String... args) {
         Day day = Day.valueOf(args[0].toUppercase());
         System.out.println(day.tellItLikeItIs());

私はJava列挙型は初めてですが、これもうまくいくはずです。

于 2009-02-26T20:22:52.470 に答える
0

列挙型を使用することを選択し、列挙型コレクションのサイズが大きい場合:

マジック:

eclipseで作業している場合は、次のように記述するだけで「魔法」が実行されます(受け入れられた回答のコードを考慮して):

switch (day) {
}

を選択してCtrl + 1switchを押すと、魔法が働きます! (すべての値がブロックのセクションに入力されます)enumcaseswitch

于 2012-03-14T12:51:02.947 に答える