2016-09-11 3 views
-1

Итак, я сейчас занимаюсь университетским заданием первого года, и я немного застрял в одном из вопросов. Это как таковое. Измените методы setType() и setPlan(), чтобы вернуть логическое значение true/false, если выбранный тип или план недействительны. I.e, если тип был «Bogus», игнорировать тип и вернуть «ложь» в вызов. Измените класс Test, чтобы добавить оператор if, который сообщит об ошибке.Реализация булевой инструкции в коммутаторе

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

public void setType(String newType) { 
    switch (newType) { 
     case "Basic": 
      mType = newType; 
      break 

     case "Enhanced": 
      mType = newType; 
      break 

     default: 
      break 
} 

Мой вопрос, как я могу идти о добавлении, если заявление и не нужно ничего менять, чтобы сделать метод недействительным возвращать значение true/false?

+0

Пахнет случае для перечисления, хотя. – chrylis

+0

* Мой вопрос: как мне добавить добавление оператора if и что-то нужно изменить, чтобы метод void возвращал значение true/false? * - Это всего лишь переформулировка именно того же вопроса, который задал вам экзамен , и приведенный вами пример выглядит как немодифицированный код. Если вы не знаете, как добавить инструкции 'if' или изменить типы возвращаемых данных, вы действительно должны прочитать учебное пособие по языку и подумать над тем, заслуживаете ли вы прохождение оценки по заданию. –

ответ

1

Попробуйте это:

public boolean setType(String newType) { 
    switch (newType) { 
    case "Basic": 
    case "Enhanced": 
     mType = newType; 
     return true; 
    default: 
     return false; 
    } 
} 

, Вам не нужно дополнительное if заявление для этого, и вы можете проверить два или более случаев в switch с помощью проваливаемся (два или более последовательных case) ,

0

Вы можете определить массив со всеми допустимыми типами в некоторых глобально доступном месте в вашем приложении:

public static final String[] VALID_TYPES = {"Basic","Enhanced"}; 

, а затем есть метод, который просто итерацию все эти типы и проверяет, является ли данное значение соответствует одному из них :

public static boolean isValidType(String candidate){ 
    for(String validType : VALID_TYPES){ 
    if(validType.equals(candidate)){ 
     return true; 
    } 
    } 
    return false; 
} 

хорошая вещь об этом - в отличие от использования заявлений переключателя - это то, что вы можете легко modifiy список допустимых типов (добавление/типы изменений/удалить) без необходимости трогать метод, который проверяет данный тип для действительности. Таким образом, его легко поддерживать и меньше подвергать ошибкам (в коммутаторе вы можете забыть добавить оператор case для каждого возможного значения, или вы можете забыть добавить оператор break где-то и т. Д.)

+0

Извините, я не прочитал ваш начальный пост должным образом. Я дал еще один ответ, содержащий решение с модифицированным методом setType – user3237736

0

Лучшая практика говорит об этом является «проверка параметров», и это уборщик тоже неудачу рано:

public boolean setType(String newType) { 
    if (!newType.matches("Basic|Enhanced")) { 
     return false; 
    } 
    type = newType; // or whatever you need to do 
    return true; 
} 

Варианты тестирования также включают в себя:

if (!Arrays.asList("Basic", "Enhanced").contains(newType)) 

который также аккуратно обрабатывает newType быть пустой без дополнительной с ода.

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

+0

о перечислении: это правильно, поскольку «внутренний код» идет. Но, вероятно, данный тип вводится пользователем. Поэтому, если вы используете перечисления, вам все равно нужно проверить данную строку на перечисление, например. вызовите метод YourEnum.valueOf (givenString) и посмотрите, является ли оно нулевым или нет. Поэтому я думаю, что в этом случае проще просто придерживаться строк – user3237736

+0

Давай, парень, это всего лишь копия + вставленный вопрос о назначении и [вы должны знать лучше] (http://meta.stackoverflow.com/a/253793/ 616460). –

0

Другие ответы являются хорошими. Вот мое занятие. Тернарный оператор, ? и : выражение, логически является «if then else».

public boolean setType(String newType) { 
    boolean result = (newType.equals("Basic") || newType.equals("Enhanced")); 
    mType = result ? newType : mType; 
    return result; 
} 
+0

Ваш тип возврата должен быть логическим. ;) – mzl

+0

dooooohhh !!!!!!!!!! – selbie

+0

возможно. Но я бы рекомендовал обменять порядок равных вызовов, т. Е. «Basic» .equals (newType) вместо newType.equals («Basic»), чтобы избежать возможных NullPointerExceptions – user3237736

0
public class YourClass{ 

    private String mType; 

    private static final List<String> VALID_TYPES = Arrays.asList("Basic","Enhanced"); 

    public boolean setType(String newType){ 
     if(!VALID_TYPES.contains(newType)){ 
     return false; 
     } 
     mType = newType; 
     return true; 
    } 
} 

И аналогично для setPlan метода, просто определить другой список VALID_PLANS.

А о тестовом классе:

if(!yourClassObject.setType("Some Invalid Type")){ 
    System.err.println("Invalid type!"); 
} 
-2

добавив булево свойство класса, например:

public class Test 
{ 
    private boolean flag; 
}