«Простой» If-оператор не работает в небольшом фрагменте кода [Beginner] [Java] - PullRequest
0 голосов
/ 16 ноября 2018

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

public static String savingsCalc(char pack, double hours)
{
    String returnVal = "";
    double packageRateA = 9.95;
    double packageRateB = 13.95;
    double packageRateC = 19.95;
    double savings = 0;

    if (hours > 10) packageRateA = 9.95 + ((hours - 10) * 2.00);

    if (hours > 20) packageRateB = 13.95 + ((hours - 20) * 1.00);

    if (pack == 'A')
    {
        if (packageRateA < packageRateB) returnVal = "";

        else if (packageRateA < packageRateC && packageRateA > packageRateB)
        {
            savings = packageRateA - packageRateB;
            System.out.printf("You would save $%.2f if you switched to package B!%n", savings);
        }

        else if (packageRateA > packageRateC)
        {
            savings = packageRateA - packageRateC;
            System.out.printf("You would save $%.2f if you switched to package C!%n", savings);
        }

    }

    return returnVal;
}//shows savings if changing to other package

Если я введу «15» часов, он должен напечататьЭкономия для «Пакета B», но не для этого. Я проверил правильность всех значений, напечатав строку, но я не понимаю, почему она не будет печататься.

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

packageRateA становится 19,95, потому что hours > 10.packageRateB остается на уровне 13,95.packageRateC остается на 19,95.

Это правда?

packageRateA < packageRateB

Нет, A больше.

Это правда?

packageRateA < packageRateC && packageRateA > packageRateB

Нет, A и C - это одно и то же.

Это правда?

packageRateA > packageRateC

Нет, A и C - это одно и то же.

Таким образом, ни одно из условий не являетсяtrue и returnVal остается пустым.

0 голосов
/ 16 ноября 2018

Проверьте свою логику. Если я предполагаю, что значение, переданное для pack, равно A, то следующая строка изменит packageRateA на 19.95:

if (hours > 10) packageRateA = 9.95 + ((hours - 10) * 2.00);

После этой строки packageRateA имеет то же значение, что и packageRateC, и больше, чем packageRateB. Ни одно из условных операторов не оценивается как истинное с этими значениями.

Если вы хотите, чтобы он выбрал packageRateB, вам нужно изменить логику в этом условном выражении

else if (packageRateA < packageRateC && packageRateA > packageRateB)
0 голосов
/ 16 ноября 2018

Это происходит потому, что вы проверяете packageRateA < packageRateC.Который не удовлетворен, когда вы передаете аргумент.

packageRateA будет равен 19,95 при hours=15.00, что равно packageRateC.

Если вы измените условие на packageRateA <= packageRateC, ваш код будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...