【问题标题】:incrementing arrays and length递增数组和长度
【发布时间】:2019-03-23 21:55:32
【问题描述】:

我正在设置商店计划。下面的代码是一种方法。该代码包括建立商店和实际使用商店。在这种方法中,我试图根据用户购买的商品数量来计算用户获得的折扣。

当用户开设商店时,他们可以设置 x 数量的商品来获得折扣。

例如,如果用户购买了 20 件商品,并且符合折扣条件的商品数量 x 设置为 6 包。用户将从原始价格中减去(2 * 商品价格)折扣。

每 6 包用户免费获得 1 包,最多 20 包。

6 包 + 1 包免费 + 6 包 + 1 包免费 + 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
}

【问题讨论】:

  • 我已经更新了我的问题。

标签: java arrays


【解决方案1】:

我的代码版本(我删除了从未解释过的东西):

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);

您会得到以下输出:(这与您的 cmets 一致)

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 的特别折扣,百事可乐提供买 4 送 1 的特别折扣。因此,10 包可乐,用户免费获得 2 包,20 包百事可乐,用户免费获得 4 包。这给了我们 (2*10) + (4*30) = 140 的总特别折扣。
  • 免费包被添加到用户想要购买的包总数中。
  • @IttyBittyStitch 如果将免费商品添加到客户要求的商品数量中(在 buyItems[i] 中),为什么您的原始问题会显示“6 包 + 1 包免费 + 6 包 +一包免费 + 6 包 = 20 包”而不是“6 包 + 1 包免费 + 另 6 包 + 1 包免费 + 6 包 + 1 包免费 = 21 包”?你的数学似乎表明购买的物品数量不能通过添加免费物品来改变(即使已经获得了免费物品)另外,我 100% 不明白你在底部发布的总特别折扣数学.
  • 没错。 “购买的物品数量不能通过添加免费物品来改变(即使已经获得免费物品)”。不是 21 而是 20。用户将获得他们购买的物品的确切数量。
  • 我继续测试了您在循环中提供的代码。很抱歉误解了您的回答。它终于奏效了!非常感谢你的帮助!我希望你有一个美好的一天。
【解决方案2】:

为什么所有这些数组?它们不只是一个数量吗? (我可能是误会了)

如果您确实将这些更改为整数,您可以通过以下方式免费获得金额

count = Math.floor(buyItems/packs);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2017-06-06
    • 2020-01-20
    • 2013-04-30
    相关资源
    最近更新 更多