увеличивающие массивы и длину

#java #arrays

#java #массивы

Вопрос:

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

Когда пользователь создает магазин, он может установить 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
}
  

Комментарии:

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

Ответ №1:

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

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

        System.out.println("NametnumFreettotalNumtTotalPrice");
        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]   "tt"   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
  

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

Комментарии:

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

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

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

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

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

Ответ №2:

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

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

 count = Math.floor(buyItems/packs);