Оценка перечисления в переключателе - PullRequest
0 голосов
/ 09 октября 2011
enum type {WD, AGGT, ACCT}
public type empType



public void salary(int choice, int hours_Worked)
    {
        switch(choice)
        {
        case ?:  
        case ?: 
        case ?:
        }
    }

Я не уверен, что указывать в случаях, так как выбор, который передается в методы, является числовым, большинство примеров, которые я нахожу, - это сравнения строк ... Я всегда мог просто заставить случаи быть один и два, но. ..это бы убило смысл перечисления в первую очередь ..

Ответы [ 3 ]

2 голосов
/ 09 октября 2011

Действительно, метод должен принимать type choice, а не int choice, в качестве аргумента.(И, действительно, Type должен быть написан заглавными буквами и иметь лучшее имя.)

Вы спрашиваете, как перейти от порядкового целочисленного значения к значению enum?Это не очень хорошая идея, но если нужно, вы можете преобразовать это следующим образом:

type valueOf(int ordinal) {
  for (type t : type.values()) {
    if (t.ordinal() == ordinal) {
      return t;
    }
  }
  throw new IllegalArgumentException();
}

... но опять же, это исправляет плохой дизайн.Измените этот метод.

1 голос
/ 09 октября 2011

Сначала перечисление в Java объявляется следующим образом:

public enum EmpType {
    WD, AGGT, ACCT
}

Имя перечисления должно быть в верхнем регистре по соглашению. Чтобы сослаться на значение перечисления, просто укажите его, например EmpType.WD. Однако внутри коммутатора он выводится, поэтому вы должны его опустить, например:

EmpType myEmpType = EmpType.WD;
switch (myEmpType) {
    case WD:
          break;
    default:
}

Обратите внимание, что тип переменной объявлен как EmpType, а не int. Взгляните на Java Tutorial .

0 голосов
/ 09 октября 2011

Метод должен выглядеть следующим образом:

public void salary(Type choice, int hours_Worked)
    {
        switch(choice)
        {
        case WD:  
        case ACCT: 
        case AGGT:
        }
    }

потому что, если у вас есть перечисление, вы должны его использовать, а не какое-то анонимное int Если вам действительно нужно, вы можете преобразовать порядковый номер (который является деталью реализации) следующим образом:

Type type = Type..... // WD, ...
int o = type.ordinal();
// reverse mapping: ordinal -> Type
Type type2 = Type.values()[o];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...