Я настраиваю программу магазина. Код ниже — это метод. Код включает в себя создание магазина и фактическое использование магазина. В рамках этого метода я пытаюсь вычислить скидку, которую получает пользователь, в зависимости от того, сколько товаров он покупает.
Когда пользователь создает магазин, он может установить 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
}




Зачем все эти массивы? Разве они не просто сумма? (может я неправильно понял)
Если вы измените их на целые числа, вы можете получить сумму бесплатно с помощью
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 Если бесплатные предметы добавляются к количеству предметов, запрошенных покупателем (в buyItems[i]), почему в исходном вопросе говорится: «6 упаковок + 1 упаковочка бесплатно + еще 6 упаковок + одна упаковочка бесплатно + 6 упаковок = 20 пакетов» вместо «6 пакетов + 1 пакет бесплатно + еще 6 пакетов + один пакет бесплатно + 6 пакетов + один пакет бесплатно = 21 пакет»? Ваша математика, кажется, предполагает, что количество купленных предметов не может быть изменено путем добавления бесплатных предметов (даже если бесплатный предмет уже будет заработан). .
Правильно. «количество приобретенных предметов не может быть изменено путем добавления бесплатных предметов (даже если бесплатный предмет уже был заработан)». Это будет не 21, а скорее 20. Пользователь получит точное количество предметов, которые он купил.
С этим объяснением я до сих пор не понимаю, почему buyItems[i] / (packs[i] + 1); код не работает. в примере с кока-колой состояние будет таким: buyItems[i] = 10; пакеты [я] = 3; и 2 = (целое) 10/(3+1); так как вы сказали, вы бы 2 бесплатно. Кроме того, действительно ли packs[i] должен быть двойным? можно ли заказать части предметов? потому что если это так, моя математика будет выключена.
@IttyBittyStitch Я обновил свой ответ, включив в него код, который, как мне кажется, дает желаемый результат. Если нет, пожалуйста, дайте мне набор допустимых входных и выходных данных.
Я пошел дальше и протестировал код, который вы предоставили в цикле. Извините за непонимание ваших ответов. Наконец-то это работает! Большое вам спасибо за вашу помощь! Я надеюсь у тебя был замечательный день.
Я рад, что это сработало. Если я ответил на ваш вопрос, не могли бы вы отметить его как «принятый»? (и, возможно, проголосовать за это) Спасибо!
Я обновил свой вопрос.