Как это еще, если утверждение может быть улучшено? - PullRequest
0 голосов
/ 05 февраля 2019

Мне нужно выяснить, что не так с этим кодом и как его можно улучшить.Что если бы я получил больше ценностей?

Будет ли цепочка else if лучше или оператор переключения?

string StatusMessage(int value)
{
  string message;

  if (value == 1)
  {
    message = "A";
  }

  else if (value == 2)
  {
    message = "A";
  }

  else if (value == 3)
  {
    message = "A";
  }

  else if (value == 10)
  {
    message = "B";
  }

  else if (value == 20)
  {
    message = "C";
  }

  else if (value == 100)
  {
    message = "D";
  }

     return message;
}

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Помимо заглавных букв string (против String), это действительно не имеет значения ...

И оператор switch, и блок if / else будут оцениваться одинаково, когда выпопасть под капот.Это действительно вопрос личных предпочтений.

Если код, который вы хотите запустить, настолько прост и похож между опциями;как правило, я бы использовал оператор switch только потому, что он будет выглядеть более компактным и аккуратным.Но, как я уже сказал, это на самом деле не имеет значения.

Замечу, ваш вопрос "homework-esq", который мы стараемся избегать в переполнении стека.Я бы рекомендовал попробовать оба метода и посмотреть, как работает сравнение, если вам нужно добавить, скажем, еще 3 значения - опять же, вероятно, мало чем отличается.

0 голосов
/ 05 февраля 2019

В случае, если вы хотите очень прямолинейное «наивное» решение switch-case, я бы выбрал следующее:

public class HelloWorld
{

    public static void main(String []args)
    {
        System.out.println("Hello World");
        System.out.println(StatusMessage(100));
    }

    public static String StatusMessage(int value)
    {
        String message;
        switch(value)
        {
            case 1:
            case 2:
            case 3: message = "A";
                    break;

            case 10: message = "B";
                     break;

            case 20: message = "C";
                     break;

            case 100: message = "D";
                      break;

            default: message = "";
                     break;
        }

        return message;
    }  
}    
0 голосов
/ 05 февраля 2019

Вы можете использовать оператор switch, как уже предлагалось в комментариях.

Другой подход заключается в определении Map<Integer, String> и использовании его в качестве реестра для сообщений с помощью значений int следующим образом:

public class SomeClass {
    private Map<Integer, String> messageByValue = new HashMap<>();
    {
        messageByValue.put(1, "A");
        messageByValue.put(2, "A");
        messageByValue.put(3, "A");
        messageByValue.put(10, "B");
        messageByValue.put(20, "C");
        messageByValue.put(100, "D");
    }

    public String statusMessage(int value) {
        return messageByValue.getOrDefault(value, "default");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...