Увеличение массивов и длины

Я настраиваю программу магазина. Код ниже — это метод. Код включает в себя создание магазина и фактическое использование магазина. В рамках этого метода я пытаюсь вычислить скидку, которую получает пользователь, в зависимости от того, сколько товаров он покупает.

Когда пользователь создает магазин, он может установить x количество товаров, чтобы претендовать на скидку.

Например, если пользователь покупает 20 товаров, и x количество товаров для получения скидки устанавливается равным 6 упаковкам. Пользователь получит (2 * цена товара) скидку, вычтенную из первоначальной цены.

Каждые 6 пакетов пользователь получает 1 пакет бесплатно, максимум 20.

6 пакетов + 1 пакет бесплатно + еще 6 пакетов + один пакет бесплатно + 6 пакетов = 20 пакетов.

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

Массивы выводились из других методов:

price[i] это цена товара buyItems[i] — количество товаров, которые покупает пользователь packs[i] — выбор скидки пользователем, например, пользователь может установить скидка на применение при 2 пакетах, 3 пакетах или даже без них.

public static void checkOuts(String [] names, double [] price,double [] packs,double addDiscount[], double[] buyItems, double[]addDiscountrate, int k ){

    double orgSub=0;
    double newSub=0;
    double addPercent=0;
    double specDis =0;
    double freePack=0;
    double disCheck =0;
    double count=0;

    for (int i =0; i < k; i++ ) {
        orgSub+=price[i]*buyItems[i];
    }

    System.out.println("Original Subtotal:             $" + orgSub);

for (int i =0; i < k; i++ ) {
    orgSub+=price[i]*buyItems[i];
}

System.out.println("Original Subtotal:             $" + orgSub);

for (int j = 0; j < buyItems.length; j++) {
    disCheck = buyItems[j];

    for(int d =0; d < buyItems.length; d++) {
        freePack = packs[d];

        for (int s =1; s < disCheck; s++)
            if (s % freePack==0) {
                count++;
                disCheck = disCheck -1;
                System.out.println(disCheck);
            }

    }
    specDis+= count*price[j];
    // the final discount that will be subtracted from original
}

Я обновил свой вопрос.

IttyBittyStitch 23.03.2019 23:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Зачем все эти массивы? Разве они не просто сумма? (может я неправильно понял)

Если вы измените их на целые числа, вы можете получить сумму бесплатно с помощью

count = Math.floor(buyItems/packs);
Ответ принят как подходящий

Моя версия вашего кода (я удалил вещи, которые никогда не объяснялись):

public static void checkOuts(String[] names, double[] price, int[] packs, int[] buyItems) {

        System.out.println("Name\tnumFree\ttotalNum\tTotalPrice");
        for (int i = 0; i < names.length; i++) {
            int numFree = buyItems[i] / (packs[i] + 1);
            double totalPrice = (buyItems[i] - numFree) * price[i];
            System.out.println(names[i] + "\t" + numFree + "\t" + buyItems[i] + "\t\t" + totalPrice);
        }

    }

При вызове со следующим кодом:

String[] names = {"Coke", "Pepsi"};
double[] price = {1, 1};
int[] packs = {3, 4};
int[] buyItems = {10, 20};

checkOuts(names, price, packs, buyItems);

Вы получаете следующий вывод: (что соответствует вашим комментариям)

Name    numFree totalNum TotalPrice
Coke    2       10       8.0
Pepsi   4       20       16.0

Вы также можете захотеть сделать свой код объектно-ориентированным. Вместо того, чтобы передавать параллельные массивы, было бы проще передать один массив товаров или заказов, в котором были бы поля для имени, цены, скидки и всего остального, что вам нужно.

Вы неправильно поняли вопрос. Price[i], packs[i] и buyItems[i] действительно представляют индекс предметов. Однако в каждом массиве хранится несколько значений. BuyItems[i] / (packs[i] + 1); не дает количество скидок, которые он должен дать. Например, кока-кола предлагается со специальной скидкой «Купи 3 и получи 1 бесплатно», а Pepsi предлагается со специальной скидкой «Купи 4 и получи 1 бесплатно». Так, при 10 упаковках кока-колы пользователь получает 2 упаковки бесплатно, а при 20 упаковках пепси пользователь получает 4 упаковки бесплатно. Это дает нам общую специальную скидку (2*10) + (4*30) = 140.

IttyBittyStitch 24.03.2019 00:24

Бесплатный пакет добавляется к общему количеству пакетов, которые пользователь хочет купить.

IttyBittyStitch 24.03.2019 00:27

@IttyBittyStitch Если бесплатные предметы добавляются к количеству предметов, запрошенных покупателем (в buyItems[i]), почему в исходном вопросе говорится: «6 упаковок + 1 упаковочка бесплатно + еще 6 упаковок + одна упаковочка бесплатно + 6 упаковок = 20 пакетов» вместо «6 пакетов + 1 пакет бесплатно + еще 6 пакетов + один пакет бесплатно + 6 пакетов + один пакет бесплатно = 21 пакет»? Ваша математика, кажется, предполагает, что количество купленных предметов не может быть изменено путем добавления бесплатных предметов (даже если бесплатный предмет уже будет заработан). .

gabe870 24.03.2019 00:31

Правильно. «количество приобретенных предметов не может быть изменено путем добавления бесплатных предметов (даже если бесплатный предмет уже был заработан)». Это будет не 21, а скорее 20. Пользователь получит точное количество предметов, которые он купил.

IttyBittyStitch 24.03.2019 00:40

С этим объяснением я до сих пор не понимаю, почему buyItems[i] / (packs[i] + 1); код не работает. в примере с кока-колой состояние будет таким: buyItems[i] = 10; пакеты [я] = 3; и 2 = (целое) 10/(3+1); так как вы сказали, вы бы 2 бесплатно. Кроме того, действительно ли packs[i] должен быть двойным? можно ли заказать части предметов? потому что если это так, моя математика будет выключена.

gabe870 24.03.2019 00:48

@IttyBittyStitch Я обновил свой ответ, включив в него код, который, как мне кажется, дает желаемый результат. Если нет, пожалуйста, дайте мне набор допустимых входных и выходных данных.

gabe870 24.03.2019 01:20

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

IttyBittyStitch 24.03.2019 01:30

Я рад, что это сработало. Если я ответил на ваш вопрос, не могли бы вы отметить его как «принятый»? (и, возможно, проголосовать за это) Спасибо!

gabe870 24.03.2019 01:36

Другие вопросы по теме