使if语句更整洁,不确定如何创建一个整洁的循环JAVA编程

时间:2015-03-10 17:31:37

标签: java loops if-statement case

  @Override
    int getDiscountRate(float priceThisYear, float priceLastYear) {
         float totalPrice;
        totalPrice = priceThisYear + priceLastYear;
        if (totalPrice >= 250 && totalPrice < 350) {
            return 5;
        } else if (totalPrice >= 350 && totalPrice < 450) {
            return 6;
        } else if (totalPrice >= 450 && totalPrice < 550) {
            return 7;
        } else if (totalPrice >= 550 && totalPrice < 650) {
            return 8;
        } else if (totalPrice >= 650 && totalPrice < 750) {
            return 9;
        } else if (totalPrice >= 750 && totalPrice < 850) {
            return 10;
        } else if (totalPrice >= 850 && totalPrice < 950) {
            return 11;
        } else if (totalPrice >= 950 && totalPrice < 1050) {
            return 12;
        } else if (totalPrice >= 1050 && totalPrice < 1150) {
            return 13;
        } else if (totalPrice >= 1150 && totalPrice < 1250) {
            return 14;
        } else if (totalPrice >= 1250 && totalPrice < 1350) {
            return 15;
        } else if (totalPrice >= 1350 && totalPrice < 1450) {
            return 16;
        } else if (totalPrice >= 1450 && totalPrice < 1550) {
            return 17;
        } else if (totalPrice >= 1550 && totalPrice < 1650) {
            return 18;
        } else if (totalPrice >= 1650 && totalPrice < 1750) {
            return 19;
        } else if (totalPrice >= 1750 && totalPrice < 1850) {
            return 20;
        }
        else if (totalPrice > 1850){
        return 20;
        }
          return 0;
    }

尝试使代码看起来更整洁,最好是减少其他ifs的数量,并且可能实现某种形式的循环。

我们的想法是,当用户花费超过350美元时,折扣率从5%开始,然后每消费100美元再折扣1%,最高折扣率为20%

我理解为有经验的程序员,这很可能是微不足道的。程序本身有效但我知道这不是编码它的最佳方法。

5 个答案:

答案 0 :(得分:2)

我建议这样的事情:

if(totalPrice >= 350) {
  int baseDiscount = 5;
  int additionalDiscount = (totalPrice - 350) / 100;
  if(additionalDiscount > 15) additionalDiscount = 15;

  return baseDiscount + additionalDiscount;
}
return 0;

然后我们只是按照你说的话说。 5%,如果超过350,那么每100美元以上增加1%。我添加了代码中的“最大20%”规则。 :)

(尚未测试过)

答案 1 :(得分:1)

免责声明我是根据代码(为购买250 <= totalPrice < 350提供5%的折扣)写的,而不是规格,即5%应该从350开始。

首先,你正在重新检查界限;例如:

if (totalPrice >= 250 && totalPrice < 350) {
        return 5;
} else if (totalPrice >= 350 && totalPrice < 450) {

我们知道,如果我们尚未输入第一个if,则必须>= 350,除非它是< 250。因此,如果您先检查250条件,那么您当然可以减少代码:

if (totalPrice < 250) {
   return 0;
} else if (totalPrice < 350) {
   return 5;
} else if (totalPrice < 450) {
    return 6;

那么,我们在这里做的是什么?我们正在寻找界限,我们映射Map<Integer, Integer>的{​​{1}}怎么样?我们需要使用minSpend -> discount维护订单:

TreeMap

为了找到折扣,我们将{em>向后循环到final Map<Integer, Integer> discounts = new TreeMap<>(); discounts.put(250, 5); discounts.put(350, 6); //and so on 上,找到小于Map的第一个键:

totalPrice

这允许完全灵活地绑定折扣映射。如果您有一些固定的规则,那么您可以简单地用数学方法对其进行描述。

你有&#34; 5在250然后另外1为每100&#34;归结为:

for(final Entry<Integer, Integer> e : discounts.descendingMap().entrySet()) {
    if(e.geyKey() <= totalPrice) {
        return e.getValue();
    }
}
return 0;

答案 2 :(得分:1)

要求:350%花费5%,之后每100次+ 1%

第1步:存储花费的费用。 第2步:检查花费,并应用必要的折扣。我会使用减法/ mod方法。 第3步:返回折扣百分比。

实现:

public static int discountPrice(int moneySpent) {
    int percentage = 0;

    // get out early if it's less than the needed amt
    if (moneySpent < 350) {
        return percentage;
    }
    // if at least 350 was spent
    if (moneySpent >= 350) {
        percentage += 5; // add 5 to the percentage
        moneySpent -= 350; // subtract 350 since we've already accounted for it
    }
    // while loop to calculate bonus percentage
    while (moneySpent >= 100) {
        percentage += 1; // add one to the percentage.
        moneySpent -= 100;
    }

    // return a max of 20
    if (percentage > 20) { percentage = 20; }
    return percentage;
}

将它放在像这样的函数中可以很容易地改变价格 - 折扣价值。可以在第二个if块中轻松修改基本百分比,以及需要花费的最小资金(第一个和第二个)。每个价格的百分比增长也可以在最后一个块中轻松修改。

答案 3 :(得分:0)

  

我们的想法是,当用户花费超过350美元时,折扣率从5%开始,然后每花费100美元再折扣1%

你可以这样做:

int spent = 500;
if(spent > 350){
   int discount = 5 + (spent-350)/100;
}

可能需要一些调整,但你得到了基本的想法。另请注意,您发布的代码不符合您的上述要求。

答案 4 :(得分:0)

如果我看得正确,那就是(值 - 250)/ 75

的最低点

也许试试:

int minDiscount = 5;

if (totalPrice < 250) {
   return 0;
}

return Math.Floor((totalPrice - 250) / 75) + minDiscount;