Frage

Ich erinnere mich an der Universität von damals mit ‚binäre Suche‘ einen Schalter oder ‚binären Schalter‘. So etwas ist mein Google foo gebrochen heute. Wie auch immer es geht so nach unten: Sie definieren eine Reihe von möglichen Optionen (Strings in der Regel), geschieht etwas Magie, und diese Optionen in der Anordnung, die Fälle werden in dem Schalter geschieht. Ich erinnere mich, dass sie in alphabetischer Reihenfolge für diese Arbeit sein mußten. Können Sie mir helfen, die Magie erinnern? Auch ein Name von dem, was ich suchen soll wäre fantastisch.

War es hilfreich?

Lösung

Ich denke, was Sie suchen, ein Enum .

Von dem Link oben ...

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;
        }
    }

    ....
}

Andere Tipps

Meinen Sie gperf? Oder vielleicht waren Sie auf die Theorie bezieht (Hashing) im Allgemeinen?

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

Normalerweise würde ich nicht einen Schalter derart missbrauchen (auch wenn ich kann). Versuchen Sie könnten, werden Sie nicht in der Lage sein, Arrays zu erhalten in einer switch-Anweisung zu arbeiten, weil es nur konstante Werte in den Fallleitungen ermöglicht. Sind Sie sicher, dass Sie nicht einige Muster denken wie unten oder eine Aufzählung?

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
}

Mit einem Enum ohne Schalter wie folgt aussieht:

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());
    }
}
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());

Ich bin neu in Java Aufzählungen, aber ich denke, das sollte auch funktionieren.

Wenn Ihre Wahl ist Enum und Ihre Enum Sammlung zu verwenden ist eine große Größe Gebrauch:

MAGIC:

Wenn Sie arbeiten in Eclipse , wird es eine „magische“ für Sie tun nur Sie die folgende (unter Berücksichtigung der Code der akzeptierte Antwort) schreiben müssen:

switch (day) {
}

wählen Sie die switch und drücken Sie Strg + 1 und die Magie funktioniert! (Alle enum Werte in den case Abschnitte Ihres switch Block bevöl)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top