企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?这个题目小弟已经写出来了,但是用的是很笨的方法, 请教高手要如何优化一下呢,如果有更多的条件的话,我作出来的这个方法就很麻烦了。。if(s<=100000){
sum10=(int) (s*0.1);
System.out.println(sum10);
}
else if(s>100000&&s<=200000){
sum10=(int)((s-100000)*0.075+(100000*0.1));
System.out.println(sum10);
}
else if(s>200000&&s<=400000){
sum10=(int)((s-200000)*0.05+100000*0.075+100000*0.1);
System.out.println(sum10);
}
else if(s>400000&&s<=600000){
sum10=(int)((s-400000)*0.03+(200000)*0.05+(100000)*0.075+100000*0.1);
System.out.println(sum10);
}
else if(s>600000&&s<=1000000){
sum10=(int)((s-600000)*0.015+(200000)*0.03+(200000)*0.05+(100000)*0.075+100000*0.1);
System.out.println(sum10);
}
else if(s>1000000){
sum10=(int)((s-1000000)*0.01+(200000)*0.015+(200000)*0.03+(200000)*0.05+(100000)*0.075+100000*0.1);
System.out.println(sum10);
}

解决方案 »

  1.   

    每轮 else  s>100000&&    s>200000&&   s>400000&& ………………  多余了
      

  2.   


    import java.util.ArrayList;class TaxLimit {
    private double percent;
    private double lowerLimit;
    private double upperLimit;

    public TaxLimit(double percent, double lowerLimit, double upperLimit) {
    this.percent = percent;
    this.lowerLimit = lowerLimit;
    this.upperLimit = upperLimit;
    }

    public double getLowerLimit() {
    return lowerLimit;
    }
    public double getUpperLimit() {
    return upperLimit;
    }
    public double getPercent() {
    return percent;
    }
    public double getLimitInterval() {
    return upperLimit - lowerLimit;
    }
    }public class tax {



    public static void main(String[] args) {
    double money = 200000;
    double remain = money;
    double sum = 0;
    ArrayList taxList = new ArrayList();

    taxList.add(new TaxLimit(0.05, 0, 100000));

    taxList.add(new TaxLimit(0.1, 100000, 200000));


    for(int i = 0; i < taxList.size(); i++) {
    TaxLimit currentTax = (TaxLimit)taxList.get(i);
    if(remain > currentTax.getLimitInterval()) {
    sum += currentTax.getLimitInterval() * currentTax.getPercent();
    remain = remain - currentTax.getLimitInterval();
    continue;
    }
    else {
    sum += remain * currentTax.getPercent();
    break;
    }
    }
    System.out.println(sum);

    }
    }
      

  3.   

    个人觉得你这个题的话用switch语句做会简单一些,并且可读性高些,对于这种方法是单纯的文本描述指定的话,只能每项列出没有其他方法了。public int getSum(int I)
    {
      int sum;
      int n =(int)((I - 1)/100000);
      switch(n)
      {
          case0:{
                sum = (int)(I * 0.1);
                break;
          }
          case1:{
                sum = (int)((s-100000)*0.075+(100000*0.1));
                break;
          }
          case2:
          case3:{
                sum = (int)((s-200000)*0.05+100000*0.075+100000*0.1);
                break; 
          }
          case4:
          case5:{
                sum = (int)((s-400000)*0.03+(200000)*0.05+(100000)*0.075+100000*0.1);
                break; 
          }
          case6:
          case7:
          case8:
          case9:{
                sum = (int)((s-600000)*0.015+(200000)*0.03+(200000)*0.05+(100000)*0.075+100000*0.1);
                break; 
          }
          default:
                sum = (int)((s-1000000)*0.01+(200000)*0.015+(200000)*0.03+(200000)*0.05+(100000)*0.075+100000*0.1);
      }
      return sum;
    }