Java Математическая логика - PullRequest
0 голосов
/ 19 марта 2020

Здравствуйте, я пытаюсь ввести правильный лог c для приведенных ниже операторов.

  • Если «Пропускная способность» на 250 или более ниже «Количество пользователей» (NumberOfUsers), то Состояние VPN - «A» (Пропускная способность> NumberOfUsers + 250)
  • . Если «Bandwidth» находится между «NumberOfUsers» и 250 ниже «NumberOfUsers», то состояние «B» (пропускная способность между NumberOfUsers + 1 до NumberOfUsers +249)
  • Если значение «Пропускная способность» равно или превышает значение «NumberOfUsers», тогда состояние равно «C» (Пропускная способность <= NumberOfUsers). </li>

Это код, который я пробовал

            if (bandwidthValue > numberofusersValue + 250) {
               setVpnStatus(A);
            } else if (bandwidthValue >= numberofusersValue+1    && bandwidthValue <= numberofusersValue + 249) {
                setVpnStatus(B);
            } else if (bandwidthValue <= numberofusersValue) {
                setVpnStatus(C);
            }

Тестирование

        User Entered - 
                    BandwidthValue      =   1234
                    NumberofUsersValue  =   900

        Vpn Status Expected By the user - C 
        PASSED

    User Entered - 
                BandwidthValue      =   1234
                NumberofUsersValue  =   1234

    Vpn Status Expected By the user - C 
    PASSED

    User Entered - 
                BandwidthValue      =   1236
                NumberofUsersValue  =   1234

    Vpn Status Expected By the user - B 
    Unable to set any status - FAILING
  • Не работало для третьего теста.

Применим ли приведенный выше код к значениям BandwidthValue = x и NumberofUsersValue = y для этих операторов, упомянутых выше?

Ответы [ 4 ]

0 голосов
/ 19 марта 2020

Следующая логика c удовлетворяет требованию в вашем вопросе:

if (bandwidthValue <= (numberofusersValue - 250)) {
    setVpnStatus(A);
} else if (bandwidthValue != numberofusersValue && (bandwidthValue - numberofusersValue <= 250)
                || (bandwidthValue > (numberofusersValue - 250) && bandwidthValue < numberofusersValue)) {
    setVpnStatus(B);
} else {
    setVpnStatus(C);
}

Демо:

public class Main {
    public static void main(String args[]) {
        // Tests
        System.out.println(getVpnStatus(1234, 900));
        System.out.println(getVpnStatus(1234, 1234));
        System.out.println(getVpnStatus(1236, 1234));
    }

    static char getVpnStatus(int bandwidthValue, int numberofusersValue) {
        char vpnStatus;
        if (bandwidthValue <= (numberofusersValue - 250)) {
            vpnStatus = 'A';
        } else if (bandwidthValue != numberofusersValue && (bandwidthValue - numberofusersValue <= 250)
                || (bandwidthValue > (numberofusersValue - 250) && bandwidthValue < numberofusersValue)) {
            vpnStatus = 'B';
        } else {
            vpnStatus = 'C';
        }
        return vpnStatus;
    }
}

Выход:

C
C
B

Не стесняйтесь комментировать в случае любой проблемы / сомнения.

0 голосов
/ 19 марта 2020

Попробуйте использовать скобки (). например, (numberOfUsersValue + 250)

0 голосов
/ 19 марта 2020

Потенциальный способ сделать это на основе ваших уравнений:

if(bandwidthValue > numberofusersValue + 250) { //Check largest baseline
  setVpnStatus(A);
} else if (bandwidthValue > numberofusersValue) { //Check second largest baseline
  setVpnStatus(B);
} else { //And finally use this for anything smaller
  setVpnStatus(C);
}
0 голосов
/ 19 марта 2020

Глядя на код, я думаю, что я ожидаю, что он выйдет с A, но, читая описание проблемы, я действительно ожидал C

Я думаю, что требование было неверно истолковано - из описания Похоже, что если пользователь скажет 1000, то полоса пропускания 750 или ниже будет равна A, 751-999 - это B, 1000 или больше - C. Похоже, что вы интерпретировали это наоборот.

Также средний регистр нуждается в &&, а не ||

ПРИМЕЧАНИЕ. быть актуальным, хотя это было, когда ответили.

...