как добавить строковое сообщение на основе некоторых условий - PullRequest
0 голосов
/ 14 марта 2019

Я хочу напечатать текст, зависящий от оценки за оценку:

  • , если оценка находится в допустимый диапазон между 0 (исключая) и 100: печатается Your Grade Is : <message>.При этом <message> зависит от поддиапазона оценка .
  • , если оценка больше, чем 100 или меньше или равно 0: я хочу напечатать Enter Valid Number

ПРИМЕЧАНИЕ: Я не хочу повторять текст Your Grade Is в коде: D

Что я пробовал до сих пор

double score = 16;
    String grade = (score <= 100 && score >= 85) ? "Excellent"
            : (score >= 75 && score < 85) ? "Very Good"
                    : (score >= 65 && score < 75) ? "Good"
                            : (score >= 50 && score < 65) ? "pass"
                                    : (score > 0 && score < 50) ? "Fail" : "Enter Valid Number !";
    System.out.println(">>>"+grade);

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Условная логика с использованием if

Если у вас мало условий, вы должны использовать операторы if. Они делают ваш код читабельным. Кроме того, некоторые условия / логику можно легко изменить, изменив некоторые строки (поскольку они не являются связанными, как троичный оператор ).

Условная логика с использованием троичного оператора

Я бы рекомендовал использовать троичное выражение (result = (value != null) ? value : default) только в том случае, если вы можете поместить его в одну строку и на удобочитаемость не влияет (например, для назначения значений по умолчанию).

Решение

public static String buildMessageForScore(double score) {
    if (score > 0 && score <= 100) {
        String message = "Your Grade Is: ";
        if (score < 50) return message + "Failed";
        if (score < 65) return message + "Passed";
        if (score < 75) return message + "Good";
        if (score < 85) return message + "Very Good";
        if (score <= 100) return message + "Excellent";
    }
    return "Enter Valid Number!";
}

Разъяснения

  1. Score-Translation : Вложите свою логику в метод . Таким образом, вы можете назвать его и легко проверить его . Еще одним преимуществом является то, что вы могли бы также бросить IllegalArgumentException, если аргумент оценка недействителен.
  2. первые несколько операторов обычно проверяют правильность значений параметров . Так же, как первый if подтвердил, что оценка находится в диапазоне.
  3. последний оператор должен возвращать некоторые значения по умолчанию . Так что ваше сообщение об ошибке здесь по умолчанию.
  4. между (внешний блок if) заказным потоком управления с коротким замыканием. Заказано от низких до высоких оценок. Если оценка ниже некоторого порогового значения, он немедленно выдаст return соответствующее сообщение и покинет метод (короткое замыкание). Из-за return непосредственно после каждого условия вы можете опустить обычный стиль if .. else (аналогично break в switch .. case). Поскольку каждое условие находится в одной строке, оно более читаемо (какой предел оценки принадлежит какому сообщению).
0 голосов
/ 14 марта 2019

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

   String grade = score > 100 || score < 0 ? "Enter Valid Number !" :
"Your Grade Is" + ((score <= 100 && score >= 85) ? "Excellent"
            : (score >= 75 && score < 85) ? "Very Good"
                    : (score >= 65 && score < 75) ? "Good"
                            : (score >= 50 && score < 65) ? "pass"
                                    : (score > 0 && score < 50) ? "Fail");
    System.out.println(">>>"+grade);
...